在 PostgreSQL 中有没有办法对列进行排名/权重以便对结果进行排序?

use*_*833 3 postgresql order-by

假设我正在搜索三个文本列。我不仅想要与给定单词或短语匹配的结果,而且还想对它们进行加权 ( column A > column B > column C) - 从而对结果进行排序,使得与列中的单词匹配的行A将比列中匹配的行高B,而那些column 中的匹配B将高于 column 中的匹配C

这可能吗?你能为我提供一些术语或进一步阅读的建议吗?

Erw*_*ter 5

全文搜索具有详细的加权机制。

对于简单的模式匹配:

SELECT *
FROM   t
WHERE  col_a ILIKE '%keyword%' OR
       col_b ILIKE '%keyword%' OR
       col_c ILIKE '%keyword%' 
ORDER  BY col_a ILIKE '%keyword%' OR NULL
        , col_b ILIKE '%keyword%' OR NULL
        , col_c ILIKE '%keyword%' OR NULL;
Run Code Online (Sandbox Code Playgroud)

我不使用col_a ILIKE '%keyword%' DESC,因为那会首先对 NULL 列进行排序。我们想像NULL一样对待FALSE,这是通过这种方式实现的。