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