PHP MYSQL поисковая система, использующая ключевые слова - PullRequest
2 голосов
/ 13 мая 2011

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

Что мне нужно, это:

Мои ключевые слова:

search, faster, profitable

Их синонимы:

search: grope, google, identify, search   
faster: smart, quick, faster  
profitable: gain, profit  

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

1 Ответ

1 голос
/ 07 июля 2011

Лучшим решением было бы использовать существующую поисковую систему, такую ​​как Lucene или одну из ее альтернатив (см. Каковы лучшие альтернативы Lucene? ).

Теперь, если выЕсли вы хотите реализовать это самостоятельно (это действительно большая и существующая проблема), вам следует взглянуть на концепцию Inverted Index .Это то, что используют Google и другие поисковые системы.Конечно, у них много дополнительных систем, но это основная.

Идея инвертированного индекса состоит в том, что для каждого ключевого слова (и синонимов) вы сохраняете идентификатор документов.которые содержат ключевое слово.Тогда очень легко найти соответствующие документы для набора ключевых слов, потому что вы просто вычисляете пересечение (или объединение в зависимости от того, что вы хотите сделать) их списка в инвертированном индексе.Пример:

Предположим, что это ваш инвертированный индекс:

smart: [42,35]
gain: [42]
profit: [55]

Теперь, если у вас есть запрос «умный, выигрыш», ваши соответствующие документы являются пересечением (или объединением) [42, 35] и [42].

Чтобы обработать синонимы, вам просто нужно расширить запрос, чтобы включить все синонимы для слов в исходном запросе.Исходя из вашего примера, ваш запрос станет «быстрее, быстрее, выигрыш, прибыль, прибыль».

Как только вы это реализовали, хорошим улучшением будет добавление веса TFIDF к вашемуключевые слова.По сути, это способ взвешивать редкие слова (программирование) больше, чем обычные ().

Другой подход - просто просмотреть все ваши документы и найти те, которые содержат ваши слова (или их синонимы).Инвертированный индекс будет НАМНОГО быстрее, потому что вам не нужно каждый раз просматривать все ваши документы.Отнимающая много времени операция строит индекс, который должен быть выполнен только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...