PostgreSQL全文搜索-为与所有术语匹配的结果排定优先级

PostgreSQL全文搜索-为与所有术语匹配的结果排定优先级,postgresql,full-text-search,ranking,Postgresql,Full Text Search,Ranking,您好,我想为PostgreSQL全文搜索定义一个查询,这样,与所有术语匹配的结果排名更高,而仅与部分术语匹配的结果也会被检索 例如: 查询:树木 我想得到的结果包括两个词在更高的排名。但是,我也希望得到的结果只包括树或木 我尝试使用plainto_tsquery('tree | wood'),但这并没有对包括所有查询词在内的记录进行优先级排序 我输入了一个数据库列ts\u vector,我正在搜索这个列 提前感谢您的回答 解决方案:我能够在按照排名对结果进行明确排序后实现我想要的结果,例如: s

您好,我想为PostgreSQL全文搜索定义一个查询,这样,与所有术语匹配的结果排名更高,而仅与部分术语匹配的结果也会被检索

例如:

查询:
树木

我想得到的结果包括两个词在更高的排名。但是,我也希望得到的结果只包括

我尝试使用
plainto_tsquery('tree | wood')
,但这并没有对包括所有查询词在内的记录进行优先级排序

我输入了一个数据库列
ts\u vector
,我正在搜索这个列

提前感谢您的回答

解决方案:我能够在按照排名对结果进行明确排序后实现我想要的结果,例如:

select * from table, to_tsquery('english', 'wood | tree') query where vector_column @@ query order by ts_rank_cd(search_index, query) desc;

内置的排序函数
ts_rank
ts_rank\u cd
应该自动执行此操作。注意,提供给排名函数的查询应该是带有
的查询,而不是
&


请注意,首先执行
&
查询,然后仅在第一个查询未找到行时执行
|
查询可能会更快。当然,如果至少有一行
&
行,那么您就不会得到任何
行,因此您必须确定这是否可以接受。

运行两个查询:一个是
'tree&wood'
查询,另一个是
'tree&wood'
查询。显示排名较高的第一个查询的结果。