2014-09-26 22 views
2

我想實現類似於stackoverflow標記建議輸入字段的東西。在數據庫中,我有兩個表:一個是標籤,另一個是tagaliases或標籤同義詞(tagSynonyms)。使用typeahead血獵犬來處理搜索項具有別名或同義詞

當用戶鍵入一個術語時,搜索引擎應該足夠聰明以檢測輸入術語的別名,並僅顯示與該輸入術語對應的主標籤。用獵狗來實現這個最好的方法是什麼?

回答

0

只需發送的輸入項到服務器,並執行類似下面這樣的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() 

});

+0

非常感謝回覆。預計服務器端的SQL查詢會根據其使用頻率返回排序標籤列表。換句話說,與每個標籤的名稱一起,我還需要通過「計數器」。顯示的建議應根據與每個標籤名稱相關的「計數器」值以遞減順序顯示可能的標籤。 這是否有可能用血獵犬來實現? – Seme1 2014-09-28 14:17:22

+0

我的一些同義詞與查詢完全不同。我怎麼能告訴獵犬他們是一樣的?例如,當用戶進入青色時,我將「青色」保存在數據庫中作爲「藍色」的同義詞。在建議列表中,即使用戶輸入了青色,我也希望顯示「藍色」而不是「青色」。 – Seme1 2014-09-28 15:37:24

相關問題