三元组词相似度究竟是如何工作的?

Jac*_*las 6 postgresql postgresql-extensions postgresql-9.6

word_similarity 函数的文档说:

返回一个数字,该数字指示第一个字符串与第二个字符串中最相似的单词的相似程度。该函数在第二个字符串中搜索最相似的词,而不是最相似的子字符串。结果的范围是零(表示两个字符串完全不同)到一(表示第一个字符串与第二个字符串的一个单词相同)。

但是,如果“第一个字符串”包含多个单词,他们对结果应该是什么有点含糊。以下结果的解释是什么:

select word_similarity('foo bar','foo bar baz');
Run Code Online (Sandbox Code Playgroud)
| word_similarity |
| :-------------- |
| 1 |
select word_similarity('baz bar','foo bar baz');
Run Code Online (Sandbox Code Playgroud)
| word_similarity |
| :-------------- |
| 1 |
select word_similarity('baz foo','foo bar baz');
Run Code Online (Sandbox Code Playgroud)
| word_similarity |
| :-------------- |
| 0.8 |

dbfiddle在这里

Eva*_*oll 4

从2017-2018 年的邮件列表线程来看,它不是那样工作的

我们搜索与第一个字符串三元组具有最佳相似性的第二个字符串三元组(按原始顺序)的连续范围。可能的解决方案可能是强制此范围边界位于字边界。然而,搜索部分 单词会变得不太方便。我们已经有用户采用此功能。

解决方案是发布1.4 版本,其中包含应随 PostgreSQL 11 一起删除的pg_trgm新功能。strict_word_similarity它将提供强制范围边界位于字边界的功能。此外,还将有两个新的运算符<<<-><<%它们将对索引执行严格的字范围操作。

有关更多信息,请参阅开发版本的文档pg_trgm