Какой из них лучше для эффективного поиска в свободном тексте, в режиме гибернации или Lucene?

#lucene #hibernate-search

#lucene #режим гибернации-поиск

Вопрос:

Мы разрабатываем веб-приложение с использованием Spring MVC, Spring и Hibernate.

Нам нужно добавить в наши приложения возможности эффективного поиска в свободном тексте. Для этого мы думаем использовать либо поиск в режиме гибернации (он использует Lucene под капотом), либо непосредственно lucene.

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

Спасибо.

Ответ №1:

Вы сами сказали — вы будете использовать Lucene так или иначе.

Необработанный Lucene API не очень прост в использовании. Он намного более низкоуровневый, чем поиск в режиме гибернации. если вы уже используете режим гибернации, то это несложно — используйте режим гибернации для реализации функциональности текстового поиска.

Ответ №2:

Отказ от ответственности: Я один из разработчиков Hibernate Search.

Цель проекта — не конкурировать с Lucene или Solr, а максимально упростить интеграцию с приложениями в режиме гибернации, чтобы избежать необходимости поддерживать синхронизацию двух миров и дублировать все операции отображения и CRUD.

Хотя мы предоставляем несколько общих помощников и хорошую инкапсуляцию, Hibernate Search также может предоставить вам прямую ссылку на Lucene API, так что, если вам понадобится использовать «сырой» Lucene API, вы никогда не застрянете. Также для записи в индекс Hibernate Search предоставляет общий шаблон, который удовлетворит большинство известных требований, но в случае, если у вас очень нестандартные требования, вы можете получить полный контроль над написанными документами.

Solr — хорошая альтернатива, но поскольку это отдельный сервер, вам приходится взаимодействовать с ним через REST API, что совершенно отличается, со своими плюсами и минусами. Не всегда требуется иметь вторую службу для управления, и, конечно, удаленные вызовы никогда не будут такими эффективными, как прямые ссылки на Lucene и все его внутренние фильтры и кэши. Не все функциональные возможности Lucene могут быть доступны через удаленный API, и если вам нужно выполнить какую-либо операцию «низкого уровня», если это не реализовано в Solr, вы не сможете этого сделать (без исправления Solr). Тем не менее, Solr очень хорош, особенно когда вы хотите поделиться индексом с другими приложениями, отличными от Java, и поэтому мы могли бы добавить серверную часть Solr для поиска в режиме гибернации, чтобы в конечном итоге синхронизировать сервер Solr (особенно, если к этому есть интерес и, возможно, некоторая помощь).

Наконец, Lucene API — это действительно сложный материал. Мы тратим много усилий, чтобы наилучшим образом использовать его для обеспечения максимальной производительности, предоставляя стабильный API пользователям, использующим поиск в режиме гибернации, в основном до сих пор все версии были обратно совместимы, чтобы обеспечить «постепенное» повышение производительности для использования новейших приемов Lucene, которые на самом деле довольно часто меняют API; эти изменения всегда интересны, но будьте готовы поддерживать это в своем приложении, если вы не используете надлежащую абстракцию.

Ответ №3:

Другой способ использования Lucene — получить API-интерфейс middlman, который известен как SOLR. SOLR подключится к Lucene и выполнит HTTP-вызовы для поиска. Пожалуйста, обратите внимание, что вам нужно будет собрать и проанализировать XML, который использует Solr. Все функциональные возможности Lucene демонстрируются через SOLR и должны быть действительно полезными.