【问题标题】:PostgreSQL full text search - prioritizing results for results matching with all termsPostgreSQL 全文搜索 - 优先考虑与所有术语匹配的结果
【发布时间】:2020-12-09 14:15:34
【问题描述】:

您好,我想为 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;

【问题讨论】:

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

标签: postgresql full-text-search ranking


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2021-07-28
    • 2018-07-21
    相关资源
    最近更新 更多