PostgreSQL。寻找与给定句子最接近的句子[英] PostgreSQL: Find sentences closest to a given sentence

本文是小编为大家收集整理的关于PostgreSQL。寻找与给定句子最接近的句子的处理方法,想解了PostgreSQL。寻找与给定句子最接近的句子的问题怎么解决?PostgreSQL。寻找与给定句子最接近的句子问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

我知道我可以将 @@ 运算符与 to_tsquery 一起使用,但 tsquery 接受特定单词作为查询.

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

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

推荐答案

全文搜索(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');

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

三元组相似度

可能更适合搜索相似性,甚至在一定程度上克服了拼写错误.

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

基本上,在 sentence 上有一个三元组 GiST 索引:

-- 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;

更多:

两者结合

您甚至可以结合 FTS 和 trigram 相似性:

本文地址:https://www.itbaoku.cn/post/1764047.html