0

У меня есть страница для поиска пользователей с определенными критериями (id, name, email, department, job) и прямо сейчас я использую критерии Hibernate для моего поиска, и он работает очень хорошо. Мне было интересно узнать о преимуществах спящий поиск с lucene queries, который заставит меня использовать его, вместо того, чтобы использовать мой текущий пользовательский поиск.Hibernate Search vs Custom Search

ответ

3

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

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

Дайте мне все пользователи отдела «FooBar».

или

Дайте мне все пользователи отдела «FooBar» с работой «FooBarIst»

Однако, если вы работаете над большими наборами, не являющихся индексированных данных, вы можете заметить падение производительности. Например, если ваш атрибут «имя» не кэшируются, вы заметите, что запрос типа:

Дайте мне все пользователи с именем LIKE «Harr *» который должен дать вам или пользователям имя

Harrold 
Harrison 
Harring 
Harrelson 

будет выполнять очень плохо.

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

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

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

Здесь общий запрос для первого сценария (где критерии API достаточно и Hibernate Search + Lucene является немного излишним):

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

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

Все пользователи, у которых есть электронное письмо, rts с буквой «f» Что касается всех пользователей, у которых есть письмо, которое начинается с букв «fOo»?

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

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

0

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

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

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

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

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

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