Я пытаюсь найти самый быстрый способ поиска предложений.Сначала я думал, что функция UDF Левенштейна в сочетании с таблицей mysql сделает эту работу.Но используя levenshtein, mysql должен был бы пройтись по каждой строке таблицы (тонны слов), что сделало бы запрос очень медленным.
Теперь я недавно установил и начал использовать Sphinx (http://sphinxsearch.com/) для полнотекстового поискаглавным образом из-за его производительности и тесной интеграции mysql со SphinxSE.
Поэтому я спросил себя, могу ли я реализовать алгоритм «Вы имели в виду», использующий sphinx для повышения производительности, и я думаю, что нашел простой.Я беру все ключевые слова, которые хочу исправить, вставляю пробел между каждой буквой, затем помещаю его в индекс сфинкса. Если слово «ключевое слово», оно становится «keywor d». Теперь, когда пользователь вводит слово, я разделяю его нана буквы и поиск в индексе сфинкса для записи (мне просто нужна), которая соответствует любой из предоставленных букв. Лучшая часть заключается в том, что сфинкс очень хорош при расчете релевантности (веса) совпадающих строк, поэтому лучшее совпадение будетвсегда имеют наибольший вес (я думаю). Это также учитывает слова (буквы в моем случае) позициипоэтому наилучшее совпадение будет в таком порядке.
С помощью запроса сфинкса я получаю самое похожее слово в списке ключевых слов.Затем я проверяю это с помощью php, используя увеличенное расстояние Левенштейна, которое учитывает переставленные буквы http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance.Если расстояние до строки меньше 2 (и! = 0), предложите слово.В противном случае ничего не предлагайте.
Есть ли проблема с моей идеей?Что-то, о чем я не думал?Есть ли какие-либо ожидаемые сбои в запросе сфинкса и измышления при расчете релевантности сфинкса, которые не дают наилучшего совпадения?Пожалуйста, поправьте меня, если я где-то ошибаюсь.