elasticsearch-java
elasticsearch-java copied to clipboard
Phrase suggester query fails with MissingRequiredPropertyException if highlight field is not provided in request
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.