当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL:查找最接近给定句子的句子

如何解决《PostgreSQL:查找最接近给定句子的句子》经验,为你挑选了1个好方法。

我有一张带有句子标题的图像表。给定一个新句子,我想根据新句子与存储的旧句子的接近程度,找到与之最匹配的图像。

我知道我可以将@@运算符与a一起使用,to_tsquerytsquery可以接受特定单词作为查询。

一个问题是我不知道如何将给定的句子转换为有意义的查询。该句子可能带有标点符号和数字。

但是,我也觉得我需要某种余弦相似性,但我不知道如何从PostgresQL中获得它。我正在使用最新的GA版本,如果可以解决我的问题,很高兴使用开发版本。



1> Erwin Brands..:

全文搜索(FTS)

您可以习惯于plainto_tsquery()(根据文档)...

产生tsquery忽略标点符号

SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')

 plainto_tsquery
------------------
 'sentenc' & 'irrelev' & 'word' & 'punctuat'

像这样使用它:

SELECT *
FROM   tbl
WHERE  to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');

但这仍然相当严格,并且仅提供非常有限的相似性容忍度。

Trigram相似度

可能更适合于寻找相似性,甚至在某种程度上克服了错别字。

安装附加模块pg_trgm,创建GiST索引,并在最近的邻居搜索中使用相似性运算符%

基本上,在以下位置具有三字母组合GiST索引sentence

-- SELECT set_limit(0.3);  -- adjust tolerance if needed

SELECT *
FROM   tbl
WHERE  sentence % 'My new sentence'
ORDER  BY sentence <-> 'My new sentence'
LIMIT  10;

更多:

使用PostgreSQL快速查找相似的字符串

在PostgreSQL中查找类似的帖子

全文搜索速度慢,出现频率高

结合两者

您甚至可以结合FTS和三字母组相似度:

PostgreSQL FTS和Trigram相似性查询优化

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有