ElasticSearch completion suggester with Java API

前端 未结 2 1878
天命终不由人
天命终不由人 2021-01-21 09:12

I had tried a few example codes on suggester feature of ElasticSearch on the net but I couldn\'t solve my problem against the autocomplete solution

my index:

<         


        
2条回答
  •  盖世英雄少女心
    2021-01-21 09:52

    In order to use completion feature, you need to dedicate one field, which will be called completion and you have to specify a special mapping for it.

    For example:

    "mappings": {
       "article": {
         "properties": {
          "content": {
            "type": "string"
          },
         "completion_suggest": {
          "type": "completion"}
         }
       }
    }
    

    The completion_suggest field is the field we will use for the autocomplete function in the above code sample. After this mapping defination, the data must be indexing as follow:

    curl -XPOST localhost:9200/kodcucom/article/1 -d '{
       "content": "elasticsearch",
       "completion_suggest": {
         "input": [ "es", "elastic", "elasticsearch" ],
         "output": "ElasticSearch"
       }
    }'
    

    Then Java API can be used as follows for get suggestions:

    CompletionSuggestionBuilder skillNameSuggest  = new CompletionSuggestionBuilder("complete");
    skillNameSuggest.text("es");
    skillNameSuggest.field("completion_suggest");
    
    SearchResponse searchResponse = client.prepareSearch("kodcucom")
            .setTypes("article")
            .setQuery(QueryBuilders.matchAllQuery())
            .addSuggestion(skillNameSuggest)
            .execute().actionGet();
    
    CompletionSuggestion compSuggestion = searchResponse.getSuggest().getSuggestion("complete");
    
    List entryList = compSuggestion.getEntries();
    if(entryList != null) {
        CompletionSuggestion.Entry entry = entryList.get(0);
        List options =entry.getOptions();
        if(options != null)  {
            CompletionSuggestion.Entry.Option option = options.get(0);
            System.out.println(option.getText().string());
        }
    }
    

提交回复
热议问题