使用typeahead bloodhound来处理具有别名或同义词的搜索项目

时间:2014-09-26 16:06:30

标签: jquery jquery-plugins autocomplete typeahead.js bloodhound

我正在尝试实现类似于stackoverflow标记建议输入字段的内容。在数据库中,我有两个表:一个用于标签,另一个用于tagaliases或标签同义词(tagSynonyms)。

当用户键入术语时,搜索引擎应足够智能以检测键入术语的别名,并仅显示与键入术语对应的主标记。使用猎犬来实现这一目标的最佳方法是什么?

1 个答案:

答案 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()

});