【发布时间】:2020-12-09 14:15:34
【问题描述】:
您好,我想为 PostgreSQL 全文搜索定义一个查询,以便与所有术语匹配的结果排名较高,同时也检索与仅部分术语匹配的结果。
例子:
查询:tree wood
我希望得到包含两个词的更高排名的结果。但是,我也希望得到仅包含 tree 或 wood 的结果。
我尝试使用plainto_tsquery ('tree | wood'),但这不会优先考虑包括所有查询词在内的记录。
我有一个输入为ts_vector 的数据库列,我正在此列上进行搜索。
提前感谢您的回答。
解决方案:在按排名明确地对结果进行排序后,我能够实现我想要的结果:
select * from table, to_tsquery('english', 'wood | tree') query where vector_column @@ query order by ts_rank_cd(search_index, query) desc;
【问题讨论】:
-
运行两个查询:一个使用
'tree & wood',一个使用'tree | wood'。显示排名较高的第一个查询的结果。
标签: postgresql full-text-search ranking