如何在 postgres 全文搜索中使用替代方法构建 tsquery

Son*_*Son 1 postgresql full-text-search postgresql-9.1

我已经在 postgres DB 中的一些表上配置了全文搜索。当我尝试使用超过 1 个单词构建 tsquery 时,我在 tsquery 中使用 & (AND) 作为分隔符得到单词。实际上,我找不到结果,其中只有我所问的一个词。

例子:

| ID | Name    | Description         | Rank |
|----|---------|---------------------|------|
| 1  |Somethink|This is very strange | 0.2  |
| 2  |Other    |This is strange a bit| 0    |
Run Code Online (Sandbox Code Playgroud)

当我要求“非常奇怪”时,我的 tsquery 看起来像那样'very' & 'strange' ,并且该 tsquery 的排名(ts_rank_cd)大于 0 仅对于 ID == 1,对于 ID == 2 是 0。

我的目标是使第二句话的排名> 0。

任何想法/提示/解决方案?

Mar*_*lvy 5

您可以通过执行以下操作来创建一个OR版本plainto_tsquery

select replace(plainto_tsquery('foo bar')::text, '&', '|')::tsquery;
Run Code Online (Sandbox Code Playgroud)

类似于 klin 的建议,但利用了plainto_tsquery.

顺便说very一句,我相信是一个停用词,因此它不会包含在任何to_tsqueryplainto_tsquery输出中。