postgresql - s:* 和 t:* 的奇数 to_tsquery 结果
问题描述
我正在试验 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
小提琴以防万一。
你会看到'u:*'返回为'u:*'而'a:*'没有返回任何东西。
解决方案
字母s
和t
被认为是英文文本搜索词典中的停用词,因此它们被丢弃。您可以阅读 postgres 共享文件夹下的停用词列表tsearch_data/english.stop
,您可以通过在 ubuntu/debian/mint 上键入pg_config --sharedir
With pg 11来找到该文件夹,即
cat /usr/share/postgresql/11/tsearch_data/english.stop
引用文档,
停用词是非常常见的词,几乎出现在每个文档中,并且没有区分价值。因此,在全文搜索的上下文中可以忽略它们。
最好放弃英语语法并以如上所述的程序和逻辑方式思考单词。全文搜索不会尝试基于句子结构来推断上下文,因此它对这些词没有用处。毕竟,它被称为全文搜索,而不是自然语言搜索。
至于他们如何得出添加s
和t
停用词列表的结论,统计分析一定表明这些字符是噪音。
推荐阅读
- angular - 如何为 tabPanel 定义静态索引
- oracle-apex - apex oracle 19.1 中的照片滑块
- rabbitmq - NestJS 微服务异常
- php - PHP file_get_contents 有时发送 GET 而不是 POST
- javascript - 将 javascript 文件或 blob 编码和解码为 base64
- scala - 实现依赖于不纯代码/库的纯函数式 Scala 代码时的最佳实践和方法
- python - 无法在虚拟环境 ubuntu 中安装 matplotlib
- linux - Mongod 未启动(mongod.service:失败,结果为“信号”)
- android - Firebase 远程配置限制速率限制是如何计算的?
- pyomo - 如何计算 Pyomo 模型中的过时变量?