Я рекомендую создать ваш индекс таким образом, чтобы все ваши объекты имели более или менее одинаковые основные поля: title, content, url, uuid, entity_type, entity_sourcename
и т. Д. Если у каждого вашего объекта есть уникальный набор соответствующего поля индекса, вам будет сложно построить время запрос для поиска всех объектов одновременно, и ваше представление результатов может стать огромным беспорядком. Если вам нужны определенные поля для определенного объекта, добавьте его и выполните специальную логику для этого объекта на основе его entity_type.
Я говорю по опыту: мы управляем индексом с более чем 10 различными сущностями, и этот подход работает как шарм.
P.S. Несколько других простых советов.
- Убедитесь, что ваш документ Lucene содержит все необходимые данные, чтобы построить результат и показать его пользователю (так что вам не нужно идти в базу данных для построения результата). Запросы Lucene, как правило, намного быстрее запросов к базе данных.
- Если вам необходимо использовать базу данных для создания набора результатов (например, для применения разрешений), сначала используйте запрос Lucene, чтобы ограничить результаты, запрос базы данных второй для их фильтрации.
- Не бойтесь добавлять пользовательские поля в некоторые из ваших документов, если вам это нужно: подумайте о документе Lucene как о хранилище данных с ключом.