現在,我的自動填充數據位於我的服務器上,該服務器使用LIKE查詢來查找匹配項。具體來說,我走的是「Q」參數的值,在空格分割它,並尋找每一個字匹配Songs
:(使用SearchLogic)與LIKE相匹配的客戶端自動完成
@songs = Song.sortable_name_like_all(params[:q].to_s.split)
因爲我沒有太多的歌曲,我如果我將所有歌曲一次發送到客戶端,然後基於客戶端數據自動完成,則用戶體驗可能會更好。
我現在服務器返回一個JSON陣列onready,看起來像這樣:
[{"path":"/lyrics/Young-jeezy-ft-jay-z/Go-crazy-remix","song":"Young Jeezy (Ft. Jay-Z) - Go Crazy (Remix)"},{"path":"/lyrics/Young-jeezy-ft-jay-z/Put-on","song":"Young Jeezy (Ft. Jay-Z) - Put On"}]
我的自動完成功能如下:
$("input.quick_search").autocomplete(data, {
formatItem: function(item) {
return item.song;
},
formatResult: function(item) {
return "Loading...";
}
}).result(function(event, choice, formatted) {
if (choice) {
window.location.href = choice.path;
}
}).click(function() { this.select(); });
但是現在的自動完成功能使用精確的字符串匹配,這意味着「年輕的「不匹配」年輕的Jeezy(Ft。Jay-Z) - 穿上「。
如何在這裏使用LIKE匹配?
做在客戶端,我認爲他將是tokenising搜索字符串(由空格更好服務,例如),分別匹配每個令牌,並顯示按分數排序的結果(匹配的令牌數) – 2009-11-24 08:32:13