gpt4 book ai didi

sql - 如何在postgresql的全文搜索中找到相似的词?

转载 作者:行者123 更新时间:2023-11-29 13:17:18 25 4
gpt4 key购买 nike

我正在尝试在 postgresql 上使用全文搜索:

select *
from entertainement
where to_tsvector('simple', name) @@ to_tsquery('simple', 'word_to_search:*')

这个查询运行良好,给我想要显示的内容。但是我在某些网站上发现,当我输入一个未找到的词时,它会显示No result found for 'word_to_search' 并给出我对一些其他的命题有些类似的话。例如,如果我输入单词 activityng I got

No result found for activityng

但它给了我一些包含词 activity 的命题。然而,当我输入 activityns 这个词时,我得到了:

No result found for activityns

但是我得到了一些包含单词activities 的命题。我不明白它的逻辑,因为我认为 activityns 类似于 activity 而不是 activities。我试图使用 pg_trgmsimilarity 来了解这个词的相似性,我得到了:

select similarity('activity','activityns');
similarity: 0,6666667

select similarity('activities','activityns');
similarity: 0,4666667

是否有任何其他解决方案来检测单词之间的相似性并给出更精确的结果?

最佳答案

FTS 首先将 token 缩减为 lexeme 然后比较,trigram 比较三个字母 - 你不能用如此不同的算法比较比较结果,这里是 FTS 的例子(显示为什么一个更接近另一个在你的样本中):

t=# with w(v) as (values('activityns'),('activity'),('activities'),('activit'))
select to_tsvector(v),v, to_tsvector(v) @@ to_tsquery('activ:*'),to_tsvector(v) @@ to_tsquery('activity'),to_tsvector(v) @@ to_tsquery('activit:*') from w;
to_tsvector | v | ?column? | ?column? | ?column?
---------------+------------+----------+----------+----------
'activityn':1 | activityns | t | f | t
'activ':1 | activity | t | t | f
'activ':1 | activities | t | t | f
'activit':1 | activit | t | f | t
(4 rows)

查看单词被缩减到哪个词位(第一列),并根据单词缩减到的词位(第 3、4、5 列)查看通配符用法的结果

关于sql - 如何在postgresql的全文搜索中找到相似的词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47201140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com