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':3
。 of
不再存在,这是预期的行为。 “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' 即使在英语设置中也不会“正确”提取词干。
如果我这样做:
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':3
。 of
不再存在,这是预期的行为。 “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' 即使在英语设置中也不会“正确”提取词干。