2

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

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

WHERE 语句由 3 个条件组成:

  • 文字匹配
  • 外键匹配

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

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

这是两个问题,但我认为有时这些问题结合起来会很方便。通过这个,我指的是我以前的帖子中提出的一个问题(在结果可用之前尝试多个 SELECTs 的方法?)。

提前致谢!

4

1 回答 1

6

要知道文本的匹配程度,您需要fuzzystrmatchPostgreSQL 模块。它提供了函数 asdifference并且levenshtein可以估计两个字符串之间的相似性。

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

    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优先考虑文本距离或满足的条件数量。

于 2013-02-05T12:53:08.510 回答