我正在尝试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>不返回任何内容。
答案 0 :(得分:1)
在英语文本搜索词典中,字母s
和t
被视为停用词,因此它们被丢弃。您可以阅读postgres共享文件夹中tsearch_data/english.stop
下的停用词列表,您可以通过键入pg_config --sharedir
找到该词
在ubuntu / debian / mint上使用pg 11时,将是
cat /usr/share/postgresql/11/tsearch_data/english.stop
引用docs,
停用词是非常常见的词,几乎出现在每个文档中,并且没有歧视价值。因此,在全文搜索的上下文中可以忽略它们。
最好放弃英语语法,以如上所述的程序化和逻辑方式思考单词。全文搜索不会尝试根据句子结构来推断上下文,因此这些单词没有用处。毕竟,这被称为全文搜索而不是自然语言搜索。
关于他们如何得出将s
和t
添加到停用词列表的结论,统计分析必须发现这些字符是噪音。