2012-05-26 2 views
0

У меня есть база данных из ~ 15 000 многословных фраз, которые имеют длину от 2 до 7 слов. Я хочу, чтобы иметь возможность искать небольшой документ (~ 1000 слов), чтобы увидеть, какие фразы он содержит. Я в основном ищу лучший способ достичь этого.Поиск 1000 документов Word для 15 000 фраз

Я в настоящее время есть данные в MySQL в двух таблицах:

фразы(~ 15000 строк)
phrase_id
фраза
длина (количество слов во фразе)
документы(100s/day)
document_id
текст

Список фраз остается неизменным, новые документы все время добавляются.

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

Я рассмотрел, как сделать это в MySQL

  1. разметить документ в 2-х словах, фразы, находящих фразы, которые начинаются с маркерами
  2. перебирать результаты увеличения длины маркеров - если (длина фразы == длина маркера) {match} else {сохранить для следующей длины токена}.
  3. хранить результаты в новой таблице document_phrases phrase_id, document_id

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

Есть ли какая-то техника, которую я полностью пропустил? Обратите внимание, что, хотя технически интересно, решения, использующие java/python, находятся за пределами того, что я планирую изучить для этого проекта.

+1

Ваш алгоритм выглядит нормально. PHP весьма полезен для такого рода манипулирования строками. Возможно, вам захочется загрузить текст каждого документа и обработать его с помощью PHP на фразы длиной 2-7, а затем искать эти фразы один за другим. Это должно быть относительно эффективным для документов разумной длины - Библии и Бхагавад-Гиты: хорошо. Налоговое законодательство США не так много. –

ответ

0

Вы изучали Full Text Searches. Приведенные примеры и способность находить релевантность могут дать вам некоторые идеи или альтернативы.

+0

Спасибо за это. Прочитав это, хотя это обратное тому, что я пытаюсь достичь (поиск многих документов за несколько фраз, а не поиск нескольких документов для многих фраз) – Jahnold

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