我的数据库中有两个表,agridata和geoname。我试图在agridata中找到geoid列,如下面的
select geonameid , name from geoname where name in (select distinct district_name from agridata );
我想对名称进行模糊匹配,因为确切名称不在数据库中。怎么去呢?
答案 0 :(得分: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。
答案 1 :(得分:0)
使用名为pg_trgm的PostgreSQL扩展,实现trigram匹配。
“我们可以通过计算它们共享的三元组的数量来衡量两个字符串的相似性。这个简单的想法对于测量许多自然语言中单词的相似性非常有效”
我使用它,它非常快,并且效果很好。