Как лучше всего искать по БД с Lucene? - PullRequest
7 голосов
/ 17 сентября 2008

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

Мой начальник хотел, чтобы я посмотрел на Solr , но при ближайшем рассмотрении кажется, что мы действительно хотим какой-то механизм интеграции БД с самой Lucene.

Из FAQ по Lucene они рекомендуют Поиск в спящем режиме , Компас и DBSight .

В качестве фона нашего текущего технологического стека мы используем прямые JSP на Tomcat, никакой Hibernate, никаких других фреймворков на его основе ... просто прямые Java, JSP и JDBC для базы данных DB2.

Учитывая это, кажется, что Hibernate Search может быть немного сложнее интегрировать в нашу систему, хотя было бы неплохо иметь возможность использовать Hibernate после такой интеграции.

Есть ли у кого-нибудь опыт, которым он может поделиться с помощью одного из этих инструментов (или других аналогичных решений на основе Lucene), который может помочь в выборе правильного инструмента?

Это должно быть решение FOSS, и в идеале он будет управлять обновлением Lucene автоматическими (хотя и эффективно) изменениями из базы данных, без лишних усилий, чтобы уведомлять инструмент о внесенных изменениях (в противном случае мне кажется, что я внедряю собственное решение Lucene). было бы так же хорошо). Кроме того, у нас есть несколько серверов приложений с одной базой данных (+ аварийное переключение), поэтому было бы хорошо, если бы решение было легко использовать со всех серверов приложений без проблем.

Сейчас я продолжаю проверять варианты, но было бы очень полезно использовать опыт других людей.

Ответы [ 5 ]

3 голосов
/ 19 сентября 2008

Когда вы говорите «поиск по БД», что вы имеете в виду?

Реляционные базы данных и информационно-поисковые системы используют совершенно разные подходы по уважительной причине. Какие данные вы ищете? Какие запросы вы выполняете?

Если бы я собирался реализовать инвертированный индекс поверх базы данных, как это делает Compass, я бы не использовал их подход, заключающийся в реализации абстракции Directory Люсена с BLOB. Скорее, я бы реализовал IndexReader абстракцию Lucene.

Реляционные базы данных вполне способны поддерживать индексы. Значение, которое Lucene приносит в этом контексте, - это его возможности анализа, которые наиболее полезны для неструктурированных текстовых записей. Хороший подход позволил бы использовать сильные стороны каждого инструмента.

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

2 голосов
/ 18 сентября 2008

У меня был хороший опыт работы с Компасом. Он действительно хорошо интегрирован с hibernate и может отражать изменения данных, сделанные через hibernate и jdbc, непосредственно в индексы Lucene, хотя его устройства GPS http://www.compass -project.org / docs / 1.2.2 / reference / html / gps-jdbc .html .

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

Проект Alfresco (CMS) также использует Lucene и имеет механизм для репликации изменений индекса Lucene между серверами, что может быть полезно при решении этих проблем.

Мы начали использовать Compass до того, как Hibernate Search был действительно запущен, поэтому я не могу предложить никакого сравнения с ним.

1 голос
/ 14 сентября 2010

LuSql http://code.google.com/p/lusql/ позволяет загружать содержимое базы данных, доступной в JDBC, в Lucene, что делает ее доступной для поиска. Это высоко оптимизированный и многопоточный. Я являюсь автором LuSql и в следующем месяце выйду с новой версией (перепроектированной с новой подключаемой архитектурой).

0 голосов
/ 17 сентября 2008

Что ж, кажется, что DBSight не соответствует требованию FOSS , поэтому, если это не абсолютно звездное решение, это не вариант для меня сейчас ...

0 голосов
/ 17 сентября 2008

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

...