Делаете запрос к базе данных "Интеллектуальный"? - PullRequest
3 голосов
/ 22 марта 2012

У меня есть следующее требование.

У меня есть таблица со столбцом, содержащим названия городов.Я собираюсь реализовать опцию поиска по Городу.

Но пользователь может неправильно ввести название города.

Примеры: Город "Матара" иногда пишется как "Матхара".Город «Нувара Элия» иногда пишется как «Нуваралия»

Я могу сохранить последовательность в столбце базы данных, но хочу вернуть попадания, даже если конечный пользователь использует альтернативное слово.Какой подход мне нужно использовать для эффективной реализации этого?

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Вы, вероятно, должны реализовать проверку расстояния строки как Расстояние Левенштейна

Здесь можно найти больше подходов: Как реализовать "Вы имели в виду"?

1 голос
/ 22 марта 2012

Я думаю, что вышеупомянутая проблема может быть в достаточной степени решена с помощью Levenshtein Distance, PHP Similar Text или JaroWinkler Similarity.Все подходы дали мне достаточно правильные результаты.

Редактировать инструмент Расстояние

enter image description here

0 голосов
/ 22 марта 2012

Вы хотите что-то вроде фонетического поиска.Существует несколько алгоритмов.Вы можете получить обзор здесь

Идея состоит в том, чтобы добавить в таблицу столбец с фонетическим эквивалентом вашего города и выполнить поиск по нему (после выполнения той жеискомый термин).

Некоторые СУБД, такие как Oracle, обладают предварительно реализованной функцией SOUNDEX, которая позволяет выполнять поиск без добавленного столбца.

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