我尝试在postgres 9.6上的bitsrings上创建GIN以进行快速相似性搜索。
我使用tanimoto / jaccard相似性度量:
tanimoto = popcount(bs1 & bs2)/popcount(bs1 | bs2)
其中0 - 完全不相似,1 - 相同。
更新
popcount - 是真实位数。 bs1,bs2 - bitstrings。
我使用这样的查询:
SELECT bs, tanimoto(B'11100000', bs) as t FROM test WHERE bs % B'11100000'
在桌子上:
CREATE TABLE test (bs bit(8));
%运营商是bool(tanimoto(bs,B' 11100000')> treshold)
阈值可配置。
如果需要,如何启用GIN或如何实现operator_class?