У меня есть база данных из ~ 15 000 многословных фраз, которые имеют длину от 2 до 7 слов. Я хочу, чтобы иметь возможность искать небольшой документ (~ 1000 слов), чтобы увидеть, какие фразы он содержит. Я в основном ищу лучший способ достичь этого.Поиск 1000 документов Word для 15 000 фраз
Я в настоящее время есть данные в MySQL в двух таблицах:
фразы(~ 15000 строк)
phrase_id
фраза
длина (количество слов во фразе)
документы(100s/day)
document_id
текст
Список фраз остается неизменным, новые документы все время добавляются.
Насколько я могу судить, лучший способ сделать это - с каким-то индексом. В идеале, когда документ добавляется, он будет проиндексирован, чтобы увидеть, какие фразы он содержит, чтобы при последующем поиске результаты возвращались немедленно.
Я рассмотрел, как сделать это в MySQL
- разметить документ в 2-х словах, фразы, находящих фразы, которые начинаются с маркерами
- перебирать результаты увеличения длины маркеров - если (длина фразы == длина маркера) {match} else {сохранить для следующей длины токена}.
- хранить результаты в новой таблице document_phrases phrase_id, document_id
Все это кажется много накладных расходов, хотя и мне интересно, если внешний инструмент, как сфинкс будет иметь возможность более эффективно делать это ? Я изучил его, но кажется, что это в основном для поиска большого количества документов для 1 фразы, а не для поиска одного документа для многих фраз.
Есть ли какая-то техника, которую я полностью пропустил? Обратите внимание, что, хотя технически интересно, решения, использующие java/python, находятся за пределами того, что я планирую изучить для этого проекта.
Ваш алгоритм выглядит нормально. PHP весьма полезен для такого рода манипулирования строками. Возможно, вам захочется загрузить текст каждого документа и обработать его с помощью PHP на фразы длиной 2-7, а затем искать эти фразы один за другим. Это должно быть относительно эффективным для документов разумной длины - Библии и Бхагавад-Гиты: хорошо. Налоговое законодательство США не так много. –