Поиск нечетких адресов с использованием полнотекстового кода MySQL (или sphinx?) - PullRequest
6 голосов
/ 31 октября 2011

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

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

1 Ответ

0 голосов
/ 10 января 2012

Это на самом деле невероятно сложная проблема - если вы сами по себе.Я работаю в сфере верификации адресов в компании SmartyStreets , где наши продукты выполняют описанную вами задачу.Это сложная последовательность операций, которая сопоставляет поиск адресов с действительными, даже доставляемыми конечными точками.Аккредитация выполнения точного, правильного и полного поиска адресов называется CASS Certification.

Разница между результатами Google и результатами, сертифицированными CASS, заключается в том, что алгоритмы Google являются «наиболее подходящими».Это то, в чем Google хорош ... к сожалению, это относится и к адресам, которые не совсем верны.(См .: http://answers.smartystreets.com/questions/269/why-did-the-address-fail-validation-it-looks-good-to-me)

Нечеткие поиски с MySQL дадут результаты, и ваш код может иметь алгоритмы, которые могут помочь, но нет никакой гарантии точности или достоверности, или в этом случае, даже какой-либо ценности.

Я не думаю, что вы захотите, чтобы ваши пользователи получали неправильные адреса в ответ на свой запрос. Это делает ваш сервис не соответствующим требованиям, и пользователи не получат ожидаемое значение (верно?) ...Я предлагаю вам найти поставщика программного обеспечения CASS. Например, вы можете «проверить адрес» в Google - лучшее интернет-решение, которое я могу порекомендовать, это SmartyStreets ' LiveAddress API .

...