在日常经常使用的搜索中,我们经常会看到下面这种页面。这种智能提示,会向用户友好的推荐可能用户想查询的关键词。
不管是solr还是ES,实现上面这种效果的方式有很多,这里主要是结合solr和jquery中的Autocomplete来实现上面的效果。
首先需要说明,这里使用的solr版本是5.5.5,其他版本可能有些许差别。但是基本原理应该是差不多的。对于solr服务的搭建,索引的生成,IK分词器的配置,数据批量定时生成索引,这里不做详细介绍,有兴趣的自行百度。这里主要讲解solr搭建好之后,如何配置实现Suggest功能。(其实Suggest功能和spellcheck是相辅相成的)。
首先在solrConfig.xml文件中配置searchComponent和requestHandle
text_general
suggest
org.apache.solr.spelling.suggest.Suggester
org.apache.solr.spelling.suggest.tst.TSTLookup
suggestion
0.0001
spellchecker
freq
true
true
suggest
true
false
10
true
suggest
然后再managed-schema文件中配置需要智能提示或者不全的域信息
上面中mc,sfzhm,xm是之前就已经定义好的域,我们这里是需要对这三个域进行智能提示,所以将这三个域整合到新建的suggestion的域中。(注意:这里的suggestion要和solrConfig.xml文件中配置searchComponent的域要保持一致)同时这里新增了一个text_spell域类型。其实也是可以用text_general,text_IK,具体结合自己的使用项目需求。
在配置好上面的配置之后,我们需要重新生成索引,把之前的索引删除掉,重新生成。我们在solr的管理界面上删除之前的索引
点击commit之后就ok了,确认之前的旧索引删除掉之后,我们重新按照新的配置文件,生成新的索引。然后在solr控制台中测试solr的自动提示效果
至此,solr本身的自动提示功能已经实现。
上面solr的智能提示已经完成,但是这是在solr控制台中的效果,像百度那样的实际效果是怎么实现的呢?其实这需要借助jquery的autocomplete插件来实现
相关js和css文件,具体资源可以去网上下载 https://jqueryui.com/download/
页面主要js脚本如下
$(function(){
$("#searchText").autocomplete({
source: function(request, response) {
var paravar=request.term;
$.ajax({
url: "<%=basePath%>solrController/suggest",
dataType: "json",
data: {
word:paravar
},
success: function(data) {
var result=new Array();
$.each(data,function(index,para){
result.push(para.suggestion);
});
response($.map(result, function(item) {
return {
label: item,
value: item
}
}));
}
});
},
minLength: 2
});
});
对于solrController/suggest,我们是在后台用solrj来发生suggest请求,具体代码如下
/**
* solr中的suggest智能补全功能
* @param word
* @return
*/
@ResponseBody
@RequestMapping("/suggest")
public List
具体效果
上面只是简单的介绍了solr自动提示的配置,以及怎么和autocomplete整合的小栗子!对于solr的其他功能,以及现在比较火的ES,后续在和大家一起学习!