PostgreSQL对与所有术语匹配的结果进行优先级排序



Hi我想为PostgreSQL全文搜索定义一个查询,这样与所有术语匹配的结果排名更高,同时只检索与部分术语匹配的搜索结果。

示例:

查询:tree wood

我想得到包括这两个单词在内的更高级别的结果。但是,我也希望得到仅包括treewood的结果。

我尝试使用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;

内置的排名函数ts_rankts_rank_cd应该自动执行此操作。请注意,提供给排名函数的查询应该是具有|的查询,而不是&的查询。

请注意,首先执行&查询,然后仅在第一个查询没有找到行的情况下执行|查询可能会更快。当然,如果至少有一个&行,那么就不会得到任何|行,所以你必须决定这是否可以接受。

最新更新