在数据库中进行近似搜索

时间:2011-10-12 13:47:18

标签: python database django postgresql fuzzy-search

我有一个大型数据库,里面有一系列机构(大学,医院等)。机构的名称来自不同的来源,并且对于同一机构可以拼写不同。例如,它们可能拼写错误,或者可以缩短单词(“uni”,“univ”或“university”)

鉴于我需要插入数据库的名称,是否有实用的方法来查找该机构是否已存在于数据库中?这不是一个研究项目,所以我正在寻找一个相当快的解决方案。

我正在使用django和postgresql,但我认为并不重要。

3 个答案:

答案 0 :(得分:5)

这是record linkage的问题。许多数据库为此提供了基本方法,例如字符级 n -gram匹配,其中像“university”这样的术语被扩展为

[“uni”,“niv”,“ive”,“ver”,“ers”,...]

for n = 3.数据库将索引所有此类 n -grams并允许使用某种加权匹配进行搜索。 pg_trgm似乎就是这样做的,试一试。

答案 1 :(得分:1)

您应该考虑使用专用搜索引擎。 Django-haystack使您能够轻松将Solr,Whoosh或Xapian等搜索引擎添加到您的项目中。

答案 2 :(得分:0)

听起来你想要在数据库中找到一个与你给出的值相距小的词汇距离的值。使用前缀查找内容非常简单,但拼写错误的单词更难。您可能需要阅读Peter Norvig's post on spell correctors