1、搜索自动补全(CompletionSuggestionBuilder)
搜索自动补全,可以使用CompletionSuggestionBuilder类来处理。如果要使用CompletionSuggestionBuilder来做搜索提示的话需要在定义mapping的时候制定下字段的格式内容。
{
"expJob":{
"type":"completion",
"analyzer":"ik_smart",
"search_analyzer":"ik_smart",
"payloads":true,
"preserve_separators" : false,//那么建议将忽略空格之类的分隔符。
"preserve_position_increments" : false,//如果建议项的第一个词使用的是停用词,并且我们使用了过滤停用词的分析器,需要把该项设置成false
}
}
java API
Client client = ElasticClientFactory.getClient();
SearchRequestBuilder req = client.prepareSearch(index);
req.setQuery(QueryBuilders.matchAllQuery());
CompletionSuggestionBuilder csfb = new CompletionSuggestionBuilder("sug").field(field).text(value).size(100);//sug是提示器的名字,可以有多个suggest
req.addSuggestion(csfb);
SearchResponse suggestResponse = req.execute().actionGet();
List<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> results = suggestResponse.getSuggest().getSuggestion("sug").getEntries();
System.out.println(JSON.toJSONString(suggestResponse));
for (Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option> op : results) {
Text text = op.getText();
System.out.println(text.toString());
List<? extends Suggest.Suggestion.Entry.Option> options = op.getOptions();
for (Suggest.Suggestion.Entry.Option pp : options) {
System.out.println("\t" + pp.getText() + "==>" + pp.getScore());
}
}
2、错别词纠正(TermSuggestionBuilder)
SearchResponse response = client.prepareSearch("wikipedia")
.setQuery(QueryBuilders.matchAllQuery())
.addSuggestion(new TermSuggestionBuilder("first_suggestion")
.text("graphics designer")
.field("_all")).execute().actionGet();
for( Entry<? extends Option> entry : response.getSuggest().getSuggestion("first_suggestion").getEntries()) {
System.out.println("Check for: " + entry.getText() + ". Options:")
for( Option option : entry.getOptions()){
System.out.println("\t" + option.getText());
}
}
但是对中文效果不好。
3、短语错别纠正(PhraseSuggestionBuilder)
如果想对短语进行提示的胡可以使用PhraseSuggestionBuilder来做,PhraseSuggestionBuilder在TermSuggestionBuilder的基础上添加了额外的短语计算逻辑,从而可以返回完整的短语检疫而不是单个的词项建议。用法和TermSuggestionBuilder一样。