如何在搜索时实现精确匹配

我注意到在某些搜索中,我没有得到任何结果:

但如果我缩小搜索范围,例如限定到某个特定主题,我就能找到我想要的结果:

我最初以为这可能与带重音符号的字符有关,但我进行了多次测试,发现不带重音符号的字符也会出现同样的问题。

我的第二个想法是这可能是由于停用词导致的,但我已修改了 app.yml,以截断西班牙语停用词词典

ls -l /usr/share/postgresql/13/tsearch_data/spanish.stop
-rw-r--r-- 1 root root 0 May 12 06:37 /usr/share/postgresql/13/tsearch_data/spanish.stop
                       ☝️

是否有我可以调整的设置,以确保总能找到精确匹配的结果?

你好 @Nacho_Caballero

能否提供一段示例文本和搜索词,以便重现该问题?我在图片中能看到相关内容,但目前只能看到片段。

谢谢,Alan。

以下是该特定帖子的内容:

确实,在"pienso que"之后不使用它,因为你正在陈述你认为的事实,这是一种现实,而不是一种可能性。

另一方面,当我们使用相同的结构但是否定形式时,我们会使用虚拟语气:“No pienso que haya mucha gente en el mercado hoy”。

希望这能回答你的问题。如果你需要更多细节,请告诉我,我很乐意帮助你。

祝好!:smiley:

不过,要在这里重现该行为,你需要将语言环境设置为西班牙语,并截断字典 :sweat_smile:

我在我本地运行的开发版 Discourse 网站上进行了测试,但无法重现该行为。我认为这是因为该网站几乎是空的。我认为只有当你有大量帖子时才会出现此问题(我目前大约有 68K 条帖子)。

我可以尝试其他与 postgres 字典相关的方法,但我不确定如何在运行开发版安装时进入我的 Docker 镜像。是否有类似于 launcher enter app 的等效命令?

理想情况下,应该有一种方法可以忽略停用词。例如,要在你的消息中查找这个句子:

@Nacho_Caballero,嘿,能否告知 Discourse 目前使用的是哪种搜索算法?这将有助于我排查该问题。

谢谢,Yashi。

我猜 Discourse 使用的是 PostgreSQL 默认的全文搜索算法。我认为,若要在使用引号时提供精确匹配(不进行词干提取,也不忽略停用词),唯一的办法是使用 “简单”词典 :thinking:

谢谢,@Nacho_Caballero

我会查看 PostgreSQL 全文检索算法。

是否可以搜索完全匹配项?

示例:

目前,搜索“flow”不幸返回“flower”作为最高相关结果。

尝试使用引号进行搜索,例如搜索“flow”,而不是 flow。