PostgreSQL 全文搜索没有找到它应该找到的一些词

PostgreSQL full text search not finding some words it should find

如果我这样做:

select to_tsvector('Angel of Mercy')

作为此查询的结果,我得到了 'angel':1 'mercy':3 'of':2。所以当我做一个:

select to_tsvector('Angel of Mercy') @@ to_tsquery('Mercy') 

结果我得到了 true。的确,“仁慈”在向量中。

of 是停用词,但我猜它存在是因为我没有告知语言,在那种情况下是英语。当我这样做时:

select to_tsvector('english', 'Angel of Mercy')

我得到一个 'angel':1 'merci':3of 不再存在,这是预期的行为。 “Mercy”变成了 merci 词位,这是可以理解的。但是当我做一个:

select to_tsvector('english', 'Angel of Mercy') @@ to_tsquery('Mercy') 

我得到 [] 作为结果(我认为它应该是 false 正如我在文档中读到的,但无论如何)。因此,在 table 中搜索“Mercy”(其中包含“Angel of Mercy”之类的条目)没有检索到任何结果。

这是期望的行为吗?我在这里错过了什么?如何通过“mercy”、“merciful”、“mercilessly”等类似词检索“仁慈天使”?

您的配置设置必须在矢量和查询处理之间保持一致。我们不知道您的 default_text_search_config 设置的是什么,但显然它不是英语。

select to_tsvector('english', 'Angel of Mercy') @@ to_tsquery('english','Mercy') 

请注意 'Mercilessly' 即使在英语设置中也不会“正确”提取词干。