基本上,我希望能够得到如下查询的精确匹配(包括标签):

=#SELECT to_tsvector('english', '#adoption');
 to_tsvector
-------------
 'adopt':1

相反,我希望以#开头的单词可以看到:
=#SELECT to_tsvector('english', '#adoption');
 to_tsvector
-------------
 '#adoption':1

psql全文搜索是否可以实现这一点?

最佳答案

在搜索或索引之前,可以将每个#字符替换为文本中不使用的其他字符,但这会更改解析器的解释:

test=> SELECT alias, lexemes FROM ts_debug('english', '#adoption');
┌───────────┬─────────┐
│   alias   │ lexemes │
├───────────┼─────────┤
│ blank     │         │
│ asciiword │ {adopt} │
└───────────┴─────────┘
(2 rows)

test=> SELECT alias, lexemes FROM ts_debug('english', '/adoption');
┌───────┬─────────────┐
│ alias │   lexemes   │
├───────┼─────────────┤
│ file  │ {/adoption} │
└───────┴─────────────┘
(1 row)

07-25 21:48