首页 > 解决方案 > s:* 和 t:* 的奇数 to_tsquery 结果

问题描述

我正在试验 PostgreSQL 的文本搜索功能——尤其是规范化功能to_tsquery

我使用的是英语词典(配置),由于某种原因st不会正常化。我明白为什么ia不会,但st?有趣的。

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

这是查询:

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

小提琴以防万一。

你会看到'u:*'返回为'u:*''a:*'没有返回任何东西。

标签: postgresql

解决方案


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

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

引用文档

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

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

至于他们如何得出添加st停用词列表的结论,统计分析一定表明这些字符是噪音。


推荐阅读