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