Сортировать по Soundex (или подобному) `Близость` - PullRequest
8 голосов
/ 20 октября 2010

Есть ли способ получить результаты заказа MySQL по тому, насколько близко они "звучат" к поисковому запросу?

Я пытаюсь упорядочить поля, содержащие пользовательский ввод названий городов.Вариации и орфографические ошибки существуют, и я хотел бы показать «самые близкие» совпадения сверху.

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

1 Ответ

4 голосов
/ 20 октября 2010

Soundex не годится для такого рода вещей, потому что разные слова могут дать вам одинаковые результаты Soundex и, следовательно, будут сортироваться произвольно.Лучшим решением для этого является алгоритм Levenshein Edit Distance, и вы можете реализовать его как функцию в своей базе данных: Ссылка на Levensheint impl.в качестве сохраненной функции MySql !!!

Вы также можете проверить эту SO ссылку .Он содержит реализацию алгоритма на сервере Sql (специфичную для T-SQL), но он должен иметь возможность портировать.Механика алгоритма довольно проста: для этого требуется только двумерный массив и циклическая обработка строки.

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