Сфинкс и «вы имели в виду…?» идея предложения. Будет ли это работать?

Я пытаюсь придумать самый быстрый способ делать предложения поиска. Сначала я думал, что UDF-функция Левенштейна в сочетании с таблицей mysql выполнит эту работу. Но используя levenshtein, mysql должен был бы просмотреть каждую строку в таблице (тонны слов), что сделало бы запрос очень медленным.

Недавно я установил и начал использовать Sphinx (http://sphinxsearch.com/) для полнотекстового поиска, главным образом из-за его производительности и тесной интеграции mysql с SphinxSE.

Поэтому я спросил себя, могу ли я реализовать "вы имели в виду" Обычно я беру все ключевые слова, которые хочу исправить, ставлю пробел между каждой буквой, затем помещаю их в индекс сфинкса. Если слово - «ключевое слово», оно превращается в «ключевое слово d». Теперь, когда пользователь вводит слово, я разбиваю его на буквы и ищу в индексе сфинкса запись (мне просто нужна), которая соответствует любой из предоставленных букв. Самое приятное то, что sphinx очень хорошо вычисляет релевантность (вес) совпадающих строк, поэтому лучшее совпадение всегда будет иметь наибольший вес (я думаю). Он также учитывает позиции слов (букв в моем случае), поэтому наилучшее соответствие будет именно в этом порядке.

С запросом сфинкса я получаю наиболее похожее слово в моем списке ключевых слов. Затем я проверяю это с помощью php, используя расширенное расстояние Левенштейна, которое учитывает переставленные буквы http: //en.wikipedia. org / wiki / Damerau% E2% 80% 93Levenshtein_distance . Если расстояние между строками меньше 2 (и! = 0), предложите слово. В противном случае ничего не предлагайте.

Есть ли проблема с моей идеей? Что-то, о чем я не подумал? Какие-нибудь ожидаемые сбои с запросом сфинкса и причуды с вычислением релевантности сфинкса, которые не дадут наилучшего соответствия? Пожалуйста, поправьте меня, если я где-то ошибаюсь.

5
задан BalusC 23 October 2011 в 14:14
поделиться