我已经在postgres数据库中的一些表上配置了全文搜索。当我试图用多于一个单词构建tsquery时,我在tsquery中得到了用&(AND)作为分隔符的单词。实际上,我找不到结果,我只问了其中一个词。
例子:
| ID | Name | Description | Rank |
|----|---------|---------------------|------|
| 1 |Somethink|This is very strange | 0.2 |
| 2 |Other |This is strange a bit| 0 |
当我要求“非常奇怪”时,我的tsquery看起来是这样的
'very' & 'strange'
,并且该tsquery的秩(ts_rank_cd)仅对于ID==1大于0,对于ID==2为0。
我的目标是在第二句中达到0级以上。
有什么想法/建议/解决方案吗?
最佳答案
您可以按照以下方式创建OR
版本的plainto_tsquery
:
select replace(plainto_tsquery('foo bar')::text, '&', '|')::tsquery;
类似于klin的建议,但利用了
plainto_tsquery
的堵塞能力。另外,我认为
very
是一个停止字,因此它不会包含在任何to_tsquery
或plainto_tsquery
输出中。关于postgresql - 如何在postgres全文搜索中使用替代构建tsquery,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40271758/