s:*和t:*

时间:2019-06-20 15:26:50

标签: postgresql

我正在尝试PostgreSQL的文本搜索功能-尤其是使用规范化功能 to_tsquery

我使用的是英语词典(配置),由于某些原因, s t 无法正常化。我了解为什么 i a 而不是 s t ?有趣。

它们是否匹配单个空格和制表符?

以下是查询:

select
to_tsquery('english', 'a:*') as for_a, 
to_tsquery('english', 's:*') as for_s, 
to_tsquery('english', 't:*') as for_t, 
to_tsquery('english', 'u:*') as for_u

fiddle,以防万一。

您会看到'u:*'返回为 'u:*' 'a:*'< / strong>不返回任何内容。

1 个答案:

答案 0 :(得分:1)

在英语文本搜索词典中,字母st被视为停用词,因此它们被丢弃。您可以阅读postgres共享文件夹中tsearch_data/english.stop下的停用词列表,您可以通过键入pg_config --sharedir找到该词 在ubuntu / debian / mint上使用pg 11时,将是

cat /usr/share/postgresql/11/tsearch_data/english.stop

引用docs

  

停用词是非常常见的词,几乎出现在每个文档中,并且没有歧视价值。因此,在全文搜索的上下文中可以忽略它们。

最好放弃英语语法,以如上所述的程序化和逻辑方式思考单词。全文搜索不会尝试根据句子结构来推断上下文,因此这些单词没有用处。毕竟,这被称为全文搜索而不是自然语言搜索。

关于他们如何得出将st添加到停用词列表的结论,统计分析必须发现这些字符是噪音。