PostgreSQL 全文搜索 - 优先匹配所有术语的结果

PostgreSQL full text search - prioritizing results for results matching with all terms

您好,我想为 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 应该会自动执行此操作。请注意,提供给排名函数的查询应该是带有 | 的查询,而不是 &.

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