2011-04-14 6 views
0

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

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

У кого-нибудь из вас есть хороший подход к тому, как это сделать эффективно?

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

ответ

3

Lucene - это именно тот инструмент, который подходит именно для этой задачи.

Одним из способов достижения вашей цели было бы использование RAMDirectory для индексации каждого текста, а затем получение TermEnum из индекса с помощью IndexReader. Теперь вы можете сопоставлять условия с ключевыми словами в своей БД.

Другим подходом было бы проиндексировать каждый текст как документ lucene, а затем перебирать ваши ключевые слова и получать термин «Документы» для текущего термина => всех текстов, содержащих текущий термин/ключевое слово.

+0

спасибо, что я уже думал о вашем первом подходе к ramdisk. но почему вы рекомендуете «termenum». как я понимаю, termenum пригодится, когда вам нужна частота данного слова в тексте – Nicolas

+0

@Nicolas: Я думаю, что вы имеете в виду TermFreqVector. TermEnum предоставляет вам все термины в index => все термины в документе, который вы указали с помощью RAMDirectory. – csupnig

0

Ваш текст необходимо проиндексировать таким образом, чтобы его искать. У вас есть два варианта:

1) Загрузить свои тексты в БД MySQL и сделать поле/колонки полный текст для поиска

2) Как вы говорите, индекс с Lucene.

Затем прочитайте свои ключевые слова в списке, зациклитесь на них и запросите Lucent/MySQL.

Дайте, что ваши наборы данных невелики, я бы пошел с MySQL - это будет намного быстрее настроить.

Смежные вопросы