我有一个大型数据库(1600万行),其中包含图像的感知哈希。
我希望能够在合理的时间内按汉明距离搜索行。
目前,据我所知,我认为最好的选择是自定义SP-GiST实现,该实现可实现BK-Tree,但这似乎需要大量工作,但我仍然对实用性感到困惑正确实现自定义索引的详细信息。计算汉明距离很容易,但是我确实知道C。
基本上,这里合适的方法是什么?我需要能够在哈希的特定编辑距离内查询匹配项。据我了解,长度相等的字符串的Levenshtein距离在功能上是汉明距离,因此,尽管没有明确的方法可以从中创建索引(请记住,我正在查询的值),至少存在一些对我想要的支持。我无法预先计算与固定值的距离,因为那只会对那个值有用。
哈希当前存储为64个字符的字符串,其中包含哈希的二进制ASCII编码(例如“ 10010101 ...”),但是我可以很容易地将它们转换为int64。真正的问题是我需要能够相对快速地进行查询。
似乎可以通过达成与我想要的目标类似的东西pg_trgm
,但是我不清楚三联词匹配机制的工作原理(特别是,它返回的相似性度量实际上代表了什么?看起来有点像编辑距离)。
插入性能并不关键(计算每行的哈希值在计算上非常昂贵),因此我主要关心搜索。