In PostgreSQL is there a way to rank/weigh columns so as to order the results?
Full text search has detailed weighting mechanisms.

For simple pattern matching:

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;


I don't use col_a  ILIKE '%keyword%' DESC, because that would sort NULL columns first. We want to treat NULL just like FALSE, which is achieved this way.