我在如何控制Bloodhound和Twitter Typeahead排序输出中显示的结果方面存在一些问题。
我正在使用typeahead来显示建议的地址和城市,这意味着有人可以搜索“纽约”或“曼哈顿纽约”或“纽约曼哈顿第55大道”。
当用户搜索“纽约”时,我更希望Typeahead将“纽约”作为第一个最接近匹配的建议。目前如果用户搜索“纽约”的例子,第一个建议是“55h Avenue Manhattan New York”,“22 Street Manhattan New York”等。
任何人都可以指出我如何实现这种排序的正确方向?
答案 0 :(得分:0)
我可能很想念Bloodhound的用途。我认为Bloodhound用于以巧妙的方式对结果进行排序,并且有某种方式可以通过Bloodhound选择排序算法。我想我错了。
解决方案是在获取整个内容之前对其进行排序。在这种情况下,在数据库的SQL查询期间。我按以下方式订购了我想要的东西:
SELECT address, city FROM house WHERE city LIKE :query OR address LIKE :query GROUP BY city ORDER BY CASE
WHEN city LIKE :query1 THEN 0
WHEN city LIKE :query2 THEN 1
WHEN city LIKE :query3 THEN 2
ELSE 3
END, city
其中query1,query2和query3是参数的变体。例如“cityName%”,“%% cityName %%”,“%cityName”。