【发布时间】:2012-11-10 23:05:40
【问题描述】:
我是该领域的新手,我主要想知道最先进的技术是什么以及我可以在哪里阅读有关它的信息。
假设我只有一个键/值存储,并且以某种方式定义了一些距离(key1,key2)(不确定它是否必须是一个度量,即三角不等式是否必须始终保持)。
我想要的主要是一个 search(key) 函数,它返回所有带有键的项目到搜索键一定距离。也许距离限制是可配置的。也许这也只是一个惰性迭代器。也许也可以有一个计数限制,并且一个项目(键,值)在返回的集合中具有一定的概率 P,其中 P = 1/距离(键,搜索键)左右(即,完美匹配肯定是在集合和接近匹配中至少有很高的概率)。
一个示例应用程序是MusicBrainz 中的指纹匹配。他们使用AcoustId 指纹并定义了this compare function。他们使用 PostgreSQL GIN 索引,我猜(虽然我还没有完全理解/阅读 acoustid-server 代码)GIN Partial Match Algorithm,但我还没有完全理解这是否是我所要求的以及它是如何工作的。
对于文本,我目前发现的是使用一些phonetic algorithm 来根据单词的发音来简化单词。一个例子是here。这主要是将搜索空间分解为更小的空间。但是,这有几个限制,例如在更小的空间里它仍然是一个完美的匹配。
但无论如何,我也在寻找更通用的解决方案,如果存在的话。
【问题讨论】:
-
不是一个完整的答案,但请查看 VP-trees(en.wikipedia.org/wiki/Vp-tree 和 stevehanov.ca/blog/index.php?id=130)。它们允许在度量空间中进行快速查询。
标签: database search indexing fuzzy-search