elasticsearch-java icon indicating copy to clipboard operation
elasticsearch-java copied to clipboard

Phrase suggester query fails with MissingRequiredPropertyException if highlight field is not provided in request

Open nfsantos opened this issue 3 years ago • 0 comments

Java API client version

7.17.6

Java version

18.0.2

Elasticsearch Version

8.4.2

Problem description

I have used the example for a phrase suggestion query taken from the documentation here: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html#phrase-suggester

The query in the example contains a highlight field, but this query also works correctly without this field when run from Kibana.

POST test/_search?typed_keys=true
{
  "suggest": {
    "text": "noble prize",
    "simple_phrase": {
      "phrase": {
        "field": "title.trigram",
        "size": 1,
        "gram_size": 3,
        "direct_generator": [ {
          "field": "title.trigram",
          "suggest_mode": "always"
        } ]
      }
    }
  }
}

This is to be expected as the documentation says that this field is optional.

However, the same query fails when run with the Java Client:

SearchRequest searchReqTest = SearchRequest.of(sr -> sr
        .index("test")
        .suggest(sb -> sb
                .text("noble prize")
                .suggesters("simple_phrase",
                        fs -> fs.phrase(
                                b -> b.field("title.trigram")
                                        .size(1)
                                        .gramSize(3)
                                        .directGenerator(
                                                b2 -> b2.field("title.trigram")
                                                        .suggestMode(SuggestMode.Always))))
        ));
ElasticsearchClient esClient = ....
SearchResponse<ObjectNode> searchResTest = esClient.search(searchReqTest, ObjectNode.class);

The error is the following:

Caused by: co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'PhraseSuggestOption.highlighted'
	at co.elastic.clients.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:76)
	at co.elastic.clients.elasticsearch.core.search.PhraseSuggestOption.<init>(PhraseSuggestOption.java:64)
	at co.elastic.clients.elasticsearch.core.search.PhraseSuggestOption.<init>(PhraseSuggestOption.java:52)
	at co.elastic.clients.elasticsearch.core.search.PhraseSuggestOption$Builder.build(PhraseSuggestOption.java:174)
	at co.elastic.clients.elasticsearch.core.search.PhraseSuggestOption$Builder.build(PhraseSuggestOption.java:127)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:86)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:48)
	at co.elastic.clients.json.JsonpDeserializerBase$ArrayDeserializer.deserialize(JsonpDeserializerBase.java:316)

The query works well from Java if we specify the highlight field in the request.

nfsantos avatar Sep 22 '22 12:09 nfsantos