У меня сложный запрос, требующий полнотекстового поиска по некоторым полям и основные ограничения по другим полям. Документация Hibernate Search настоятельно рекомендует не добавлять ограничения запросов к базе данных в запрос полнотекстового поиска и вместо этого рекомендует поместить все необходимые поля в полнотекстовый индекс. Проблема, с которой я столкнулся, заключается в том, что другие поля являются изменчивыми; значения могут меняться каждую минуту или около того, и эти обновления в базе данных могут происходить вне JVM, выполняющей поиск, поэтому существует высокая вероятность того, что локальный индекс Lucene будет устаревшим по отношению к этим полям.
Здесь вы найдете рекомендации по стратегии. Лучшее, что я нашел до сих пор, - это объединить результаты вручную, сначала выполнив запрос к базе данных (выбирая только идентификаторы объектов), а затем выполнив полнотекстовый поиск. и каким-то образом эффективно фильтровать результаты Lucene по набору идентификаторов объектов из базы данных. Конечно, я не знаю, сколько результатов я получу от каждого отдельного запроса, поэтому я беспокоюсь о производительности и памяти. В худшем случае это могут быть десятки тысяч строк.