2015-02-24 5 views
0

У меня есть две таблицы в моей базе данных, agridata и geoname. Я пытаюсь выяснить, геоида столбец имен в agridata, как показано нижеfuzzy match in postgresql

select geonameid , name from geoname where name in (select distinct district_name from agridata);

Я хочу сделать нечеткое соответствие имен, как точные имена не в базе данных. Как это сделать?

ответ

0

Вы можете использовать различные алгоритмы соответствия (см. here), но я не уверен на 100%, что они будут работать с пунктом in. Я бы предположил, что вы действительно хотите использовать соединение soundex, например.

select distinct g.geonameid, g.name from geoname g join agridata a on soundex(a.name) = g.name 

или аналогичный.

Если у вас есть огромный набор совпадений для работы, вы можете захотеть использовать какой-то индекс поиска, такой как ElasticSearch/Solr.

0

Использование расширения для PostgreSQL под названием pg_trgm, реализация соответствия триграмм.

«Мы можем измерить сходство двух строк путем подсчета числа триграмм, которые они разделяют. Эта простая идея оказывается очень эффективным для измерения подобия слов во многих естественных языках»

я использовал его, это очень быстро и дает отличные результаты.