# Using CompletionSuggestionBuilder with context in Java (Re-post)

**URL:** <https://discuss.elastic.co/t/using-completionsuggestionbuilder-with-context-in-java-re-post/72486>\
**Category:** Elasticsearch\
**Created:** [January 23, 2017, 1:59pm UTC](https://discuss.elastic.co/t/using-completionsuggestionbuilder-with-context-in-java-re-post/72486 "2017-01-23T13:59:47Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Cosmin\_Marginean1](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/cosmin_marginean1/32/75703_2.png) [@Cosmin\_Marginean1](https://discuss.elastic.co/u/Cosmin_Marginean1)\
**Post date:** [January 23, 2017, 1:59pm UTC](https://discuss.elastic.co/t/using-completionsuggestionbuilder-with-context-in-java-re-post/72486/1 "2017-01-23T13:59:48Z")

</div>

(Re-posting this as it was automatically closed due to lack of replies)

Hi guys

I'm trying to use the CompletionSuggestionBuilder (context suggester) with the Java client (ES 5.0.1), and I'm struggling with adding contexts, and the API is not entirely clear on that.

This is as far as I got, but again, only by intuitively surfing the API, not really sure if this is the right way to go about it, as documentation is scarce in this area.

```
CompletionSuggestionBuilder completion = new CompletionSuggestionBuilder(FIELD_SUGGEST)
        .prefix(text);
Map<String, List<? extends ToXContent>> contexts = new HashMap<>();
    
???
    
completion.contexts(contexts);

```

Also, methods on CompletionSuggestionBuilder.Contexts2x seem to be all deprecated, which I presume is not the route to pursue.

Thanks  
Cos

---

<div class="post-metadata">

**Author:** ![GyllingSW](https://avatars.discourse-cdn.com/v4/letter/g/6f9a4e/32.png) [@GyllingSW](https://discuss.elastic.co/u/GyllingSW)\
**Post date:** [January 23, 2017, 3:17pm UTC](https://discuss.elastic.co/t/using-completionsuggestionbuilder-with-context-in-java-re-post/72486/2 "2017-01-23T15:17:56Z")

</div>

I have a working sample below from the JAVA client for ES 2.4.2 - Not sure, if you requires any changes, but if so it will be minimal.

Be aware to change names appropriately - And remember, that the completion suggester only works on data loaded into the index previously.

```auto
    public Set<KeywordSuggest> keywordSuggester(String suggestText) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        ObjectReader payloadReader = objectMapper.readerFor(KeywordPayload.class);

        Set<KeywordSuggest> suggestSet = new TreeSet<>();
        final SuggestRequestBuilder suggestRequestBuilder = this.esClient.prepareSuggest();
        suggestRequestBuilder.setIndices(keywordIndex);
        CompletionSuggestionBuilder completionSuggestionBuilder = new CompletionSuggestionBuilder("keyword");
        completionSuggestionBuilder.text(suggestText);
        completionSuggestionBuilder.field("name");
        suggestRequestBuilder.addSuggestion(completionSuggestionBuilder);
        final SuggestResponse suggestResponse = suggestRequestBuilder.execute().actionGet();
        final Suggest suggest = suggestResponse.getSuggest();
        final Suggest.Suggestion<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> suggestion = suggest.getSuggestion("keyword");
        final Iterator<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> iterator = suggestion.iterator();
        while(iterator.hasNext()) {
            final Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option> entry = iterator.next();
            final List<? extends Suggest.Suggestion.Entry.Option> options = entry.getOptions();
            final Iterator<? extends Suggest.Suggestion.Entry.Option> optionsIterator = options.iterator();
            while(optionsIterator.hasNext()) {
                final Suggest.Suggestion.Entry.Option next = optionsIterator.next();
                final CompletionSuggestion.Entry.Option completion = (CompletionSuggestion.Entry.Option) next;
                final Text text = completion.getText();
                KeywordPayload keywordPayload = payloadReader.readValue(completion.getPayloadAsString());
                KeywordSuggest keywordSuggest = new KeywordSuggest();
                keywordSuggest.setText(completion.getText().toString());
                keywordSuggest.setPayload(keywordPayload);
                suggestSet.add(keywordSuggest);
            }
        }
        return suggestSet;
    }

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [February 20, 2017, 3:18pm UTC](https://discuss.elastic.co/t/using-completionsuggestionbuilder-with-context-in-java-re-post/72486/3 "2017-02-20T15:18:03Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
