Hi我想为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;
内置的排名函数ts_rank
和ts_rank_cd
应该自动执行此操作。请注意,提供给排名函数的查询应该是具有|
的查询,而不是&
的查询。
请注意,首先执行&
查询,然后仅在第一个查询没有找到行的情况下执行|
查询可能会更快。当然,如果至少有一个&
行,那么就不会得到任何|
行,所以你必须决定这是否可以接受。