在我的rails webapp中,用户可以应用多个过滤器进行搜索。我希望过滤的项目按大多数匹配条件排序。
Ex:如果用户搜索带有动力转向,电动车窗和中央门锁的汽车。结果项必须按
排序在rails中这样做的标准方法是什么?
通过编写三个不同的查询来完成上述操作。每一个一个。然后加入他们。随着搜索选项的增加,这似乎效率很低。
提前谢谢。
答案 0 :(得分:1)
我认为在这些情况下,最好放弃ActiveRecord并使用直接SQL来获得更好的性能。
您可以使用此查询在单个查询中检索和排序结果:
SELECT * FROM
(SELECT
*,
(CASE WHEN condition1 THEN 1 ELSE 0) +
(CASE WHEN condition2 THEN 1 ELSE 0) +
(CASE WHEN condition3 THEN 1 ELSE 0) as filterCount
FROM cars
WHERE condition1
OR condition2
OR condition3)
ORDER BY filterCount DESC
答案 1 :(得分:1)
嘿,你可以尝试这些方式使用你可以编写查询。
在查询中使用条件子句来查找给定匹配条件的事件,然后命令给定具有给定计数的记录
ModelName.select("*,((CASE WHEN (condition1) THEN 1 ELSE 0 END) + (CASE WHEN (condition2) THEN 1 ELSE 0 END)+( CASE WHEN (condition3) THEN 1 ELSE 0 END)) as match_occurance").where("condition1 or condition2 or condition3").order("match_occurance desc")