Hibernate Search против пользовательского поиска - PullRequest
0 голосов
/ 25 декабря 2011

У меня есть страница для поиска пользователей с некоторыми критериями (идентификатор, имя, адрес электронной почты, отдел, работа) и сейчас я использую Hibernate Criteria Queries для своего поиска, и он работает очень хорошо. мне было интересно узнать о преимуществах спящего режима поиска с запросами lucene , которые позволят мне использовать его вместо текущего пользовательского поиска.

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Я считаю, что для вашей ситуации достаточно API Criteria.Ваш поиск по Criteria API может работать хорошо, если повторяемые кэшируются и выполняются ли они над индексированными данными.

Этого может быть достаточно, если у вас есть запросы типа:

Дайте мне всех пользователей отдела "FooBar".

или

Дайте мне всем пользователям отдела "FooBar" с заданием "FooBarIst"

Однако, если вы работаете над большими наборами неиндексированных данныхВы можете заметить падение производительности .Например, если ваш атрибут "name" не кэширован, вы заметите, что запрос типа:

Дайте мне всех пользователей с именем LIKE "Harr *", которые должны дать вам пользователей.с именем

Harrold 
Harrison 
Harring 
Harrelson

будет работать очень плохо.

Моя точка зрения заключается в том, что этот запрос будет медленным, если вы не проиндексировали атрибут "name" в своей базе данных.Так что, если вы планируете использовать такие запросы, уже неплохо бы подумать о решении для полнотекстового поиска , которым являются Hibernate Search / Lucene / Solr.

Они дадуту вас гораздо лучшая производительность при поиске электронной почты или других атрибутов, например, и вы пытаетесь выполнить функцию автозаполнения, например.

Итак, я рекомендую вам следующее: В зависимости от сценариеввыберите, следует ли использовать только Criteria API или Criteria API + Hibernate Search / Lucene.Использование только Criteria API хорошо, если вы знаете, каковы его ограничения.

Здесь типичный запрос для первого сценария (где Criteria API достаточно, а Hibernate Search + Lucene - это немного излишне):

Все пользователи в FooBarDepartment

Вот типичный запрос для второго сценария (где Criteria API может сделать это, но Hibernate Search + Lucene будет лучшим выбором):

Все пользователи, у которых электронная почта начинается с буквы "f" Как насчет всех пользователей, у которых электронная почта начинается с буквы "fOo"?

Вышеупомянутый запрос может быть выполнен, конечно, с простым API Criteria, но если у вас есть миллионы пользователей, при выполнении таких запросов вы начнете замечать значительное повышение производительности в подходе Hibernate Search / Lucene по сравнению с подходом простого Criteria.

Итак, в заключение, используете ли вы простые критерии или критерии + поиск в Hibernte + Lucene, зависит от вас и зависит отТребования, дизайн и данные.

0 голосов
/ 31 марта 2012

Да, как и предполагал Баба, вы получаете лучшую производительность, но, прежде всего, это обеспечивает огромный прирост функциональности и улучшает пользовательский опыт.

Порядок возвращаемых совпадений будет (необязательно) с релевантностью , и он может иметь дело с опечатками пользователей, автопредставлениями и выполнять некоторую умную обработку текста (например, сходство слов) искомых терминов.

Вы можете предоставить "google like" текстовые поля ввода, которые интеллектуально соответствуют различным полям или даже типам объектов;реализация такой функции с помощью Criteria или SQL - это безумие сложности, и вы не получите столь же хороших результатов.

Лучшая часть интеграции вашего собственного пользовательского движка на основе Lucene заключается в том, что вы можете настроить практически все дляконкретные потребности вашего приложения, декларативно;например, вы определяете синонимы, специфичные для вашего домена, и то, как аббревиатуры понимаются вашим приложением.

Вдобавок к сгенерированным индексам очень легко выполнить анализ данных, поиск сходства документов и т. д., например.вы можете создавать облака тегов, не требуя, чтобы ваши пользователи фактически помечали вещи вручную: у вас уже есть векторы частот для всех терминов вашей базы данных.

Пример?колонка справа на этом же сайте показывает «связанные» вопросы.Я не знаю, использовали ли они для этого Hibernate Search, но именно такие функции он помогает реализовать.

...