Использование Hibernate-Search для сложных запросов вместо Criteria API

В приложении, использующем стек Wicket+Spring+JPA/Hibernate, у меня есть страница «Входящие/Поиск», которая должна иметь довольно сложные возможности поиска, где записи, сохраненные в базе данных, фильтруются с использованием множества параметров фильтрации. До сих пор я использовал JPA Criteria API для создания запроса к базе данных, но он становится довольно запутанным. Мне было интересно, подойдет ли Hibernate-Search для этого, хотя мне действительно не нужны возможности полнотекстового поиска, я просто чувствую (из того, что я читал об этом), что создание запроса может быть немного проще?


person John Manak    schedule 23.11.2010    source источник


Ответы (2)


Извините, но Hibernate Search основан на Lucence. Это не просто другой язык запросов.

Lucene не ищет сущности в вашей базе данных, она ищет атрибуты в индексе Lucene. Hibernate Search добавляет функциональность для подключения сущностей из вашей базы данных к индексу Lucene.

Hibernate Search и Lucene — это инструмент создания, когда вам нужен расширенный полнотекстовый поиск. Но если вам это не нужно, то это только много ненужной работы (и проблем).

Итак, пока вы не используете Lucene, Hibernate Search не соответствует вашим потребностям.

person Ralph    schedule 23.11.2010
comment
Итак, пока вы не используете Lucene, Hibernate Search не соответствует вашим потребностям. - мне кажется странным заявление. Использую ли я Lucene или нет, это не имеет никакого отношения к полезности Hibernate Search. Важно, нужен ли вам полнотекстовый поиск в связке с Hibernate Core. В этом случае Hibernate Search для вас. (и да, это зависит от Lucene). - person Hardy; 30.12.2010

Основной вариант использования Hibernate Search — полнотекстовый поиск. Однако его также можно использовать для индексации/поиска простых атрибутов/критериев. Является ли синтаксис для написания запросов проще, чем запрос критериев, это вопрос вкуса. Если вы не используете возможности полнотекстового поиска, вы должны учитывать, что добавляете дополнительный шаг в свое приложение. Поисковый запрос будет выполняться по индексу Lucene, который будет возвращать идентификаторы объектов (если не используется проекция). Затем соответствующие объекты будут извлечены из базы данных. С другой стороны, как только вы используете Hibernate Search, ваш поиск легко «улучшить», добавив некоторые возможности полнотекстового поиска к некоторым из ваших критериев (если это возможно).

Независимо от того, используете ли вы поиск или нет, я думаю, что ключевым моментом является написание какой-либо структуры, которая программно создает ваши запросы — запросы поиска или критериев.

person Hardy    schedule 30.12.2010