查看以下查询:
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将/
中的字符串解释为文件路径。它不会分割文件路径的部分内容,就像使用带连字符的单词一样。