postgresql - Postgresql 全文匹配意外
问题描述
查看以下查询:
1. select to_tsvector('xyz-abc-testbed') @@ to_tsquery('abc') # true
2. select to_tsvector('xyz/xyz-abc-testbed') @@ to_tsquery('abc') # false
然后我意识到:
select to_tsvector('xyz-abc-testbed')
to_tsvector
----------------------------------------------
'abc':3 'testb':4 'xyz':2 'xyz-abc-testb':1
但
select to_tsvector('xyz/xyz-abc-testbed')
to_tsvector
----------------------------------------------
'xyz/xyz-abc-testbed':1
看起来“/”对 to_tsvector 的结果影响很大。但我在 PG 文档中找不到解释。
请解释 '/' 如何影响 tv_tsvector 或指出一些解释这一点的文档。提前致谢。
解决方案
全文搜索处理的第一步是解析器,它将字符串拆分为标记并使用启发式方法为它们分配类型。进一步处理取决于类型。
该函数ts_debug
对于分析正在发生的事情很有用:
SELECT alias, description, lexemes
FROM ts_debug('xyz/xyz-abc-testbed');
alias | description | lexemes
-------+-------------------+-----------------------
file | File or path name | {xyz/xyz-abc-testbed}
(1 row)
SELECT alias, description, lexemes
FROM ts_debug('xyz-abc-testbed');
alias | description | lexemes
-----------------+---------------------------------+-------------------
asciihword | Hyphenated word, all ASCII | {xyz-abc-testbed}
hword_asciipart | Hyphenated word part, all ASCII | {xyz}
blank | Space symbols |
hword_asciipart | Hyphenated word part, all ASCII | {abc}
blank | Space symbols |
hword_asciipart | Hyphenated word part, all ASCII | {testbed}
(6 rows)
PostgreSQL 将其中的字符串解释/
为文件路径。它不会像处理连字符的单词那样将文件路径分成几部分。
推荐阅读
- asp.net - 为什么我的表格没有根据 MVC 中的下拉菜单显示我想要的结果?
- python - Python列表迭代/添加
- python - 提取字符串之间的特定文本
- r - (函数(类,fdef,mtable)中的错误:无法找到签名“spec_tbl_df”的函数“select”的继承方法
- delphi - 解析从第三方 Web 服务读取的未知 XML
- javascript - 无法将散列密码密码与 node.js 中的 bcrypt.js 进行比较
- ruby - 使用嵌套属性 Ruby API 和反应表单
- python - Tkinter:如何永远在屏幕上打印光标坐标
- macros - 从 sicp 宏中的周围抽象中捕获变量
- javascript - 如何防止 safari 在容器的孩子之外滚动捕捉?