Я работаю на сайте, который продает, скажем, и предлагает «поиск продавцов». В этом поиске вы вводите свой город или почтовый индекс или регион и расстояние (в км или мили), тогда сайт дает вам список поставщиков.Levenshtein search
Для этого у меня есть база данных с поставщиками. В форме для сохранения этих поставщиков вы вводите полный адрес, и когда вы нажимаете кнопку «Сохранить», запрос на карты Google сделан для получения их широты и долготы.
Когда кто-то выполняет поиск, я смотрю на таблицу, где храню все условия поиска и их lat/lng. Эта таблица выглядит
+--------+-------+------+
| term | lat | lng |
+--------+-------+------+
Так что первый запрос что-то очень простое
select lat, lng from my_search_table where term = "the term"
Если я найду результат, я потом искать с хорошим способом для всех поставщиков в диапазоне посетитель хочет и распечатать результат на карте.
Если я не нахожу результат, я выполняю поиск с помощью функции levenshtein, потому что люди, пишущие bruxelle или bruxeles вместо bruxelles, являются чем-то действительно распространенным я не хочу постоянно делать запрос на карты google (I также есть столбец «сколько раз в столбце», чтобы получить некоторую статистику)
Поэтому я запрашиваю my_search_time без предложения where и прохожу через все результаты, чтобы получить наименьшее расстояние levensthein. Если наименьший результат больше 2, я запрашиваю координаты с карт Google.
Вот моя проблема. Для некоторых стран (у нас есть несколько сайтов по всему миру), my_search_table имеет 15-20k + записи ... и php не (действительно) не похож на такие записи (что я прекрасно понимаю), и мой запрос попадает под тайм-аут php , Я мог бы увеличить этот таймаут, но проблема будет такой же в течение нескольких месяцев.
Итак, я попробовал функцию MySQL levensthein (найдена на stackoverflow кстати), но она также очень медленная.
Итак, мой вопрос: «Есть ли способ быстро сделать этот поиск даже на очень больших наборах данных?»
Хотя я не могу помочь, +1 для хорошо отформатированного ответа. – christopher