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