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

[BUG] org.opensearch.client.util.MissingRequiredPropertyException: Missing required property 'GeoBoundsAggregate.bounds'

Open TatianaNeuer opened this issue 1 year ago • 1 comments

What is the bug?

When performing a geo bounds aggregation on a null field, the response cannot be deserialized. This is the error:

org.opensearch.client.util.MissingRequiredPropertyException: Missing required property 'GeoBoundsAggregate.bounds'

	at org.opensearch.client.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:89)
	at org.opensearch.client.opensearch._types.aggregations.GeoBoundsAggregate.<init>(GeoBoundsAggregate.java:57)
	at org.opensearch.client.opensearch._types.aggregations.GeoBoundsAggregate.<init>(GeoBoundsAggregate.java:49)
	at org.opensearch.client.opensearch._types.aggregations.GeoBoundsAggregate$Builder.build(GeoBoundsAggregate.java:126)
	at org.opensearch.client.opensearch._types.aggregations.GeoBoundsAggregate$Builder.build(GeoBoundsAggregate.java:94)
	at org.opensearch.client.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:98)
	at org.opensearch.client.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:60)
	at org.opensearch.client.json.ExternallyTaggedUnion$Deserializer.deserialize(ExternallyTaggedUnion.java:94)
	at org.opensearch.client.json.ExternallyTaggedUnion$TypedKeysDeserializer.deserializeEntry(ExternallyTaggedUnion.java:136)
	at org.opensearch.client.json.ExternallyTaggedUnion$TypedKeysDeserializer.deserialize(ExternallyTaggedUnion.java:119)
	at org.opensearch.client.json.ExternallyTaggedUnion$TypedKeysDeserializer.deserialize(ExternallyTaggedUnion.java:106)
	at org.opensearch.client.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:87)
	at org.opensearch.client.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:81)
	at org.opensearch.client.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:185)
	at org.opensearch.client.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:146)
	at org.opensearch.client.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:87)
	at org.opensearch.client.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:91)
	at org.opensearch.client.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:55)
	at org.opensearch.client.transport.endpoints.EndpointWithResponseMapperAttr$1.deserialize(EndpointWithResponseMapperAttr.java:68)
	at org.opensearch.client.transport.rest_client.RestClientTransport.decodeResponse(RestClientTransport.java:360)
	at org.opensearch.client.transport.rest_client.RestClientTransport.getHighLevelResponse(RestClientTransport.java:326)
	at org.opensearch.client.transport.rest_client.RestClientTransport.performRequest(RestClientTransport.java:148)
	at org.opensearch.client.opensearch.OpenSearchClient.search(OpenSearchClient.java:1381)

How can one reproduce the bug?

Configure a template mapping with a geo_point field:

"mappings": {
      "properties": {
        "location": {
          "properties": {
            "coordinates": {
              "type": "geo_point"
            }
          }
        }
      }
    }

Index a document without the geo_point field:

Map<String, String> indexData = Map.of("first_name", "Bruce");
IndexRequest<Map> indexRequest = new IndexRequest.Builder<Map>().index("index_test").id("1").document(indexData).build();
        openSearchClient.index(indexRequest);

Perform a geo_bounds aggregation:

org.opensearch.client.opensearch.core.SearchResponse<Object> result = openSearchClient.search(
                org.opensearch.client.opensearch.core.SearchRequest.of(s -> s.index("index_test")
                        .aggregations("box", b -> b.geoBounds(g -> g.field("location.coordinates")))), Object.class);

What is the expected behavior?

Deserialize the response and not throwing an exception

What is your host/environment?

Opensearch 2.15.0 org.opensearch.client:opensearch-java:2.11.1

Do you have any additional context?

Here is the aggregation part of the response from opensearch, it does not contain a "bounds" field:

"aggregations": {
		"geo_bounds#box": {}
}

The bug seems similar to https://github.com/opensearch-project/opensearch-java/issues/520 but on GeoBoundsAggregate

TatianaNeuer avatar Jul 17 '24 14:07 TatianaNeuer

[Catch All Triage - 1, 2, 3]

dblock avatar Aug 05 '24 16:08 dblock

@TatianaNeuer A fix for this has been released in version 2.16.0, could you please confirm this resolves your issue?

Xtansia avatar Oct 22 '24 22:10 Xtansia

Thank you, I tested today with version 2.18.0 and I confirm the issue is resolved

TatianaNeuer avatar Jan 07 '25 12:01 TatianaNeuer