elastic search suggest智能输入即提示java案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30581017/article/details/79985483
  1. 创建索引
put housesuggest

2.创建映射

 POST housesuggest/doc/_mapping
{
"properties": {
  "houseid":{
    "type": "text"
  },
  "district":{
    "type": "completion"
    , "analyzer": "ik_max_word",
    "search_analyzer": "ik_max_word"
  }
}  
}

3.插入几条数据后(这里自行添加)

4.java代码


    public List<String> getSuggestSearch(String keyword) {
        //field的名字,前缀(输入的text),以及大小size
        CompletionSuggestionBuilder suggestionBuilderDistrict = SuggestBuilders.completionSuggestion("district")
                .prefix(keyword).size(3);
        SuggestBuilder suggestBuilder = new SuggestBuilder();
        suggestBuilder.addSuggestion("suggestDistrict", suggestionBuilderDistrict);//添加suggest

        //设置查询builder的index,type,以及建议
        SearchRequestBuilder requestBuilder = client.prepareSearch(HouseConstant.INDEX).setTypes(HouseConstant.TYPE).suggest(suggestBuilder);
        logger.info(requestBuilder.toString());

        SearchResponse response = requestBuilder.get();
        Suggest suggest = response.getSuggest();//suggest实体

        Set<String> suggestSet = new HashSet<>();//set
        int maxSuggest = 0;
        if (suggest!=null){
            Suggest.Suggestion result = suggest.getSuggestion("suggestDistrict");//获取suggest,name任意string
            for (Object term : result.getEntries()) {

                if (term instanceof CompletionSuggestion.Entry){
                    CompletionSuggestion.Entry item = (CompletionSuggestion.Entry) term;
                    if (!item.getOptions().isEmpty()){
                        //若item的option不为空,循环遍历
                        for (CompletionSuggestion.Entry.Option option : item.getOptions()) {
                            String tip = option.getText().toString();
                            if (!suggestSet.contains(tip)){
                                suggestSet.add(tip);
                                ++maxSuggest;
                            }
                        }
                    }
                }
                if (maxSuggest>=5){
                    break;
                }
            }
        }

        List<String> suggests = Arrays.asList(suggestSet.toArray(new String[]{}));

        return suggests;
    }

猜你喜欢

转载自blog.csdn.net/qq_30581017/article/details/79985483