2
我想實現類似於stackoverflow標記建議輸入字段的東西。在數據庫中,我有兩個表:一個是標籤,另一個是tagaliases或標籤同義詞(tagSynonyms)。使用typeahead血獵犬來處理搜索項具有別名或同義詞
當用戶鍵入一個術語時,搜索引擎應該足夠聰明以檢測輸入術語的別名,並僅顯示與該輸入術語對應的主標籤。用獵狗來實現這個最好的方法是什麼?
我想實現類似於stackoverflow標記建議輸入字段的東西。在數據庫中,我有兩個表:一個是標籤,另一個是tagaliases或標籤同義詞(tagSynonyms)。使用typeahead血獵犬來處理搜索項具有別名或同義詞
當用戶鍵入一個術語時,搜索引擎應該足夠聰明以檢測輸入術語的別名,並僅顯示與該輸入術語對應的主標籤。用獵狗來實現這個最好的方法是什麼?
只需發送的輸入項到服務器,並執行類似下面這樣的SQL語句:
從標籤T選擇留下名字對外連接tagSyms小號s.tagID = t.tagID 其中s .alias = $ searchstring或t.tagName = $ searchstring
並返回json格式的數據。 JSON格式的:{VAL: '標記名'}
在客戶端的網站:
var engine = new Bloodhound({
name: 'tags',
remote: 'http://example.com/tags?q=%QUERY',
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.val);
},
queryTokenizer: Bloodhound.tokenizers.whitespace
});
engine.initialize();
$("#inputField").typeahead(...);
而且看一看的displayKey和模板鍵在typeahead.js
當你想要一個排序列表,你會沒事的,如果sql是有序的。
您可以控制在意見箱獲取與模板顯示的內容:
例如,如果你想顯示的計數器也只需編輯JSON爲{VAL:「標記名」,計數器:X} 和鍵入:
.typeahead(
....,{
templates:{
suggestion:function(data){
return "<p>"+data.val+"(used: "+data.counter+" times)</p>";
}
},
source: engine.ttAdapter()
});
非常感謝回覆。預計服務器端的SQL查詢會根據其使用頻率返回排序標籤列表。換句話說,與每個標籤的名稱一起,我還需要通過「計數器」。顯示的建議應根據與每個標籤名稱相關的「計數器」值以遞減順序顯示可能的標籤。 這是否有可能用血獵犬來實現? – Seme1 2014-09-28 14:17:22
我的一些同義詞與查詢完全不同。我怎麼能告訴獵犬他們是一樣的?例如,當用戶進入青色時,我將「青色」保存在數據庫中作爲「藍色」的同義詞。在建議列表中,即使用戶輸入了青色,我也希望顯示「藍色」而不是「青色」。 – Seme1 2014-09-28 15:37:24