У меня есть таблица базы данных, полная адресов из ответов геокодирования Google Maps. Google сокращает все направления (Запад -> W, Восток -> E и т. д.).
Поэтому, если я ввожу адрес, например «100 West Pender Street», тогда форматированный адрес, возвращаемый Google Maps, будет «100 W Pender St», который я вставляю в свою таблицу.
Теперь, если пользователь приходит и ищет этот адрес, все следующее должно совпадать:
Пендер-стрит Уэст Пендер-стрит 100 Пендер 100 Вт Пендер 100 Вест Пендер
и они более или менее делают. Однако буква «w» в таблице игнорируется, поскольку она меньше минимальной длины слова. адресам, попадающим на восток, присваивается равный вес в результатах поиска (буква «E» также игнорируется).
Как лучше всего справиться с этим?
Я подозреваю, что установка минимальной длины слова на 1 - это "плохо".
Я мог бы выполнить поиск и заменить известные сокращения (N, E, S, W, St, Ave, Dr и т. д.) в адресах Google и заменить их их расширениями, но есть некоторые названия улиц, где это не так. действительно (в некоторых городах однобуквенные названия улиц: J Street и т. д.)
Кроме того, такие адреса, как «123 160 St», вообще недоступны для поиска, потому что номер улицы (123) и название улицы (160) меньше минимальной длины слова.
Является ли MySQL FullText правильным подходом для этого? Предлагает ли Sphinx что-то лучше?
Или есть другое решение, которое я еще не рассмотрел? Имейте в виду, что поисковый запрос пользователя будет сопоставляться не только с адресом свойства, но и с другими текстовыми столбцами, такими как имя и описание свойства.
ft_min_word_length
, но уменьшение ее до 2 или 1 увеличит количество результатов шума. Также будьте осторожны с сокращениями. В моем городе есть Западный Полумесяц, так как это было имя человека, а не направление. - person Marc B   schedule 31.10.2011