2010-11-23 2 views
2

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

ответ

1

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

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

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

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

+0

«Итак, до тех пор, пока вы не используете Lucene, Hibernate Search не соответствует вашим потребностям». - Мне кажется странным заявлением. Я использую Lucene или нет, не имеет никакого отношения к тому, полезен ли Hibernate Search. Важно, нужен ли вам полнотекстовый поиск в сочетании с Hibernate Core. В этом случае Hibernate Search для вас. (и да, это зависит от Lucene). – Hardy 2010-12-30 11:28:05

0

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

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