如何在Postgres pg_trgm模块中计算相似度

时间:2018-02-19 19:03:45

标签: postgresql pg-trgm

有人可以向我解释在Postgres pg_trgm模块中如何计算相似度函数。

e.g。 similarity('sage', 'message') = 0.3

1) "  s"," sa",age,"ge ",sag
2) "  m"," me",age,ess,"ge ",mes,sag,ssa

n1: cardinality(1) = 5
n2: cardinality(2) = 8
nt: cardinality(1 intersect 2) = 3

我无法看到我们如何从这3个等于0.3的数量得到一个公式。我原以为它基于一个常见的字符串相似性度量(例如Dice-Sorensen)

即。 2*nt / (n1 + n2) = 6/13 = 0.46

pg_trgm相似度得分似乎对我来说异常低

1 个答案:

答案 0 :(得分:1)

公式可以在contrib/pg_trgm/trgm.h中找到(请参阅宏CALCSML),如下所示:

nt / (n1 + n2 - nt)

在你的情况下是3 / (5+8-3) = 0.3