use*_*833 3 postgresql order-by
假设我正在搜索三个文本列。我不仅想要与给定单词或短语匹配的结果,而且还想对它们进行加权 ( column A > column B > column C
) - 从而对结果进行排序,使得与列中的单词匹配的行A
将比列中匹配的行高B
,而那些column 中的匹配B
将高于 column 中的匹配C
。
这可能吗?你能为我提供一些术语或进一步阅读的建议吗?
全文搜索具有详细的加权机制。
对于简单的模式匹配:
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
,这是通过这种方式实现的。