sql - 按相关性查询和排序

标签 sql postgresql postgresql-performance

我在这样的查询中有多个条件:

SELECT * FROM image WHERE name LIKE '%text%' AND group_id = 10 LIMIT 1

WHERE 语句由 3 个条件组成:

  • 文本匹配
  • 外键匹配

如果我想按相关性对结果进行排序,那么取决于:

  1. 文本的匹配程度
  2. 满足多少条件(例如文本匹配外键)

这是两个合而为一的问题,但我认为有时这些问题结合起来会派上用场。我指的是我以前的帖子 ( Way to try multiple SELECTs till a result is available? ) 提出的问题。

提前致谢!

最佳答案

要了解文本匹配的准确程度,您需要 fuzzystrmatch PostgreSQL 模块。它提供了 differencelevenshtein 函数,可以让您估计两个字符串之间的相似度。

然后,您可以使用以下条件构建查询:

    SELECT *
      FROM image
     WHERE name LIKE '%text%' 
       AND ( group_id = 10 
             OR second_field = 4
             OR thirth_field = 5
           )
    ORDER BY ( (group_id=10)::int
               + (second_field=4)::int
               + (thirth_field=5)::int
             ) * weight_1
             + (strlen(name) - levenshtein('text',name)) * weight_2

您可以调整 weight_1weight_2 以优先考虑文本距离或满足条件的数量。

关于sql - 按相关性查询和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707799/

相关文章:

sql - append 到假脱机文件 Oracle

sql - 两个sql查询之间的减法

c# - C#中的UTF8字符串变量

postgresql - Play 2.6 的 conf 文件中 Hikari、Quill 和 Postgres 之间的冲突

sql - 位图堆扫描性能

sql - 获取包含 JSONB 值的行,如果值不存在,也获取行

sql - 如何找到 postgresql 中两列之间的百分比?

performance - PostgreSQL - 在 VIEW 上加入慢速查询

sql - 大表更新查询慢

c# - 这段代码中的 IEventRepository 是什么? Resolver.resolve( ) 是做什么的?