我在这样的查询中有多个条件:
SELECT * FROM image WHERE name LIKE '%text%' AND group_id = 10 LIMIT 1
WHERE语句包含3个条件:
如果我想按相关性对结果进行排序,具体取决于:
这是两个问题,但我认为有些时候这些问题会在一起使用。在这里,我指的是一个由我的前职位(Way to try multiple SELECTs till a result is available?)引起的问题。
提前致谢!
答案 0 :(得分:4)
要知道文本的匹配方式,您需要fuzzystrmatch
PostgreSQL模块。它提供difference
和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))* wheight_2
您可以调整weight_1
和weight_2
以优先考虑文字距离或遇到的条件数。