我正在尝试实现类似于stackoverflow标记建议输入字段的内容。在数据库中,我有两个表:一个用于标签,另一个用于tagaliases或标签同义词(tagSynonyms)。
当用户键入术语时,搜索引擎应足够智能以检测键入术语的别名,并仅显示与键入术语对应的主标记。使用猎犬来实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
只需将输入的术语发送到服务器并执行与此类似的sql语句:
从s.tagID = t.tagID上的标签t left outer join tagSyms s中选择名称 其中s.alias = $ searchstring或t.tagName = $ searchstring
并返回json格式的数据。 JSON格式:{val:'tagname'}
在客户端网站上:
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(...);
另请参阅typeahead.js中的displayKey和模板键
当你需要一个排序列表时,如果订购了sql,你会没事的。
您可以控制使用模板显示的建议框中的内容:
例如,如果您也想显示计数器,只需将JSON编辑为{val:'tagname',counter:x} 和预先输入:
.typeahead(
....,{
templates:{
suggestion:function(data){
return "<p>"+data.val+"(used: "+data.counter+" times)</p>";
}
},
source: engine.ttAdapter()
});