Postgresql全文匹配意外

问题描述 投票:3回答:1

查看以下查询:

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或指出一些解释这一点的文档。提前致谢。

postgresql
1个回答
3
投票

全文搜索处理的第一步是解析器,它将字符串拆分为标记,并使用启发式方法为它们分配类型。进一步处理取决于类型。

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

© www.soinside.com 2019 - 2024. All rights reserved.