Использование Lucene как реляционной базы данных - PullRequest
5 голосов
/ 06 мая 2009

Мне просто интересно, сможем ли мы достичь некоторых возможностей РСУБД в lucene.

Пример: 1) У меня есть 10 000 проектных документов (PDF-файлы), которые должны быть проиндексированы вместе с их содержанием, чтобы сделать их доступными для поиска. 2) Каждый документ относится к ОДНОМУ ПРОЕКТУ. Проект может содержать такие данные, как имя проекта, номер, дата начала, дата окончания, местоположение, тип и т. Д.

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

Моя идея заключается в том, чтобы связать поле с именем projectId с каждым файлом PDF при индексации. Как только мы получим это, мы снова запустим поиск метаданных проекта.

Таким образом, мы могли бы избежать дублирования данных. Кроме того, если мы хотим обновить метаданные проекта, мы закончим обновление только в ОДНОМ МЕСТЕ. В противном случае, если мы сохраним эти метаданные со всеми индексами pdf, мы закончим обновление всех документов, что не так, как я ищу.

пожалуйста, сообщите.

Ответы [ 5 ]

1 голос
/ 29 августа 2009

Вы можете использовать Lucene таким образом;

Плюсы:

Полнотекстовый поиск легко реализовать, чего нельзя сказать о СУБД.

Минусы:

Ссылочная целостность: вы получаете ее бесплатно в СУБД, но в Lucene вы должны реализовать ее самостоятельно.

1 голос
/ 26 августа 2009

Это определенно возможно. Но всегда помните о том, что вы используете Lucene для того, для чего он не предназначен. В общем, Lucene предназначен для полнотекстового поиска, а не для отображения реляционного контента. Таким образом, чем сложнее ваша система, чем больше становится ваш реляционный контент, тем больше снижается производительность.

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

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

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

Поскольку ваш проект продолжает развиваться, вы также можете проверить Solr , также разработанный Apache, который предоставляет некоторые дополнительные функции, такие как многогранный поиск.

1 голос
/ 08 мая 2009

Похоже, что это очень хорошая вещь. Единственное ограничение, которое у вас будет (хранить ссылку на проект в Lucene, а не на данные проекта), заключается в том, что вы не сможете одновременно запрашивать текст документа и метаданные проекта. Например, «documentText: foo ИЛИ projectName: bar». Если у вас нет таких требований, то кажется, что хранить идентификатор в Lucene, который ссылается на строку базы данных, - это хорошо.

1 голос
/ 16 июня 2009

Я не уверен в ваших общих настройках, но, возможно, Hibernate Search для вас. Это позволит вам объединить преимущества реляционной базы данных с мощью полнотекстовой поисковой системы, такой как Lucene. Метаданные могут храниться в базе данных, возможно, вместе с исходными документами в формате pdf, тогда как документы Lucene просто содержат доступные для поиска данные.

1 голос
/ 06 мая 2009

Если я вас правильно понимаю, у вас есть два вопроса:

  1. Могу ли я сохранить идентификатор проекта в Lucene и использовать его для дальнейшего поиска? Да, ты можешь. Это обычная практика.
  2. Можно ли использовать этот идентификатор проекта для поиска метаданных проекта в Lucene? Да, ты можешь. Я не знаю, если это хорошая идея. Это зависит от частоты ваших обновлений метаданных и вашей схемы доступа. Если метаданные относительно статичны, и вы обращаетесь к ним только по идентификатору, Lucene может быть хорошим местом для их хранения. В противном случае вы можете использовать идентификатор проекта в качестве первичного ключа для таблицы базы данных, что может быть лучше.
...