我在我的Rails应用程序中使用SQL查询进行指定和更快速的搜索,目前我有以下查询可以很好地收集初始搜索中的数据:
SELECT * FROM selected_tables
WHERE field1 LIKE '%#{present_param}'
AND field2 LIKE '%#{present_param2}'
依此类推,只有在表格中出现相关参数时才会出现每条LIKE行。
所以我现在能够从这个查询中获得大量结果,但它们并没有以任何有用的方式排序。我需要一些方法来根据它们与表单中原始用户输入的相关性对结果进行排序,但我似乎无法在谷歌上找到任何关于它的内容。在SQL(特别是postgresql)中是否有一种方法可以基于此来订购结果?
要明确的是,当我说相关性时,我的意思是给定的搜索关键字应该在结果的标题或公司名称中,而不仅仅是存在于内容中的某个位置。
例如:如果你搜索“索尼”,你首先得到索尼电子,而不是在其名称中间某处包含索尼的另一个列表。
答案 0 :(得分:6)
我最终使用了一系列使用各种整数分数加权的Case / When语句,以优先考虑我的结果。他们工作得很好,结果是这样的:
SELECT title, company, user, CASE
WHEN upper(company_name) LIKE '%#{word[0].upcase}%' THEN 3
WHEN upper(company_name) LIKE '%#{company_name.upcase}%' THEN 2
ELSE 0 END as score
FROM selected_tables
WHERE company_name LIKE '%#{company_name}%'
ORDER BY score DESC;