word_similarity 函数的文档说:
返回一个数字,指示第一个字符串与第二个字符串中最相似的单词的相似程度。该函数在第二个字符串中搜索最相似的单词而不是最相似的子字符串。结果的范围是零(表示两个字符串完全不同)到一个(表示第一个字符串与第二个字符串中的一个单词相同)。
但是如果“第一个字符串”包含多个单词,他们对于结果应该是什么有点模糊。以下结果的解释是什么:
select word_similarity('foo bar','foo bar baz');
| word_similarity | | :---------------- | | 1 |
select word_similarity('baz bar','foo bar baz');
| word_similarity | | :---------------- | | 1 |
select word_similarity('baz foo','foo bar baz');
| word_similarity | | :---------------- | | 0.8 |
dbfiddle在这里
从2017-2018 年的邮件列表线程中,它不是那样工作的
解决方案是发布
pg_trgm
1.4版,其中包含 PostgreSQL 11 应删除的新功能。它将提供strict_word_similarity
强制范围边界位于字边界处的功能。此外,还会有两个新的运算符<<<->
,<<%
它们将对索引进行严格字范围的操作。有关更多信息,请参阅有关开发版本的文档
pg_trgm