Нечеткий поиск адресов улиц с использованием MySQL Fulltext (или sphinx?)

У меня есть таблица базы данных, полная адресов из ответов геокодирования 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 что-нибудь получше?

Или есть другое решение, которое я еще не рассматривал? Имейте в виду, что поисковый запрос пользователя будет сопоставляться не только с адресом свойства, но и с другими текстовыми столбцами, такими как имя и описание свойства.

6
задан emh 31 October 2011 в 18:53
поделиться