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