I am trying to move from Spring data elasticsearch 4.x to 5.x & spring-boot-starter-data-elasticsearch 3.0.0 in order to remove rhlc from my code.
One of my query is a geoShapeQuery
Here my old code :
GeoShapeQueryBuilder geoShape = QueryBuilders.geoShapeQuery(ConvertUtils.FULL_GEO,new Point(lon, lat));
geoShape.relation(ShapeRelation.CONTAINS);
QueryBuilder bool = new BoolQueryBuilder().filter(geoShape).should(rankFeature);
I am trying to use the new class of geoShapeQuery without success
JsonData shape = JsonData.of("{\"type\": \"point\",\"coordinates\": [ 13.0, 53.0 ]}");
Query geoShape = GeoShapeQuery.of(f->f.field(ConvertUtils.FULL_GEO)
.shape(s->s.relation(GeoShapeRelation.Contains).shape(shape)))._toQuery();
Query bool = BoolQuery.of(b->b
.filter(geoShape)
.should(rankFeature)
)._toQuery();
When I am debugging I am seeing that the geopshape object put the shape as a String instead of a JSON object.
Query: {"geo_shape":{"fullGeo":{"shape":"{"type": "point","coordinates": [ 13.0, 53.0 ]}","relation":"contains"}}}
I am expecting to have this (without the double quote):
Query: {"geo_shape":{"fullGeo":{"shape":{"type": "point","coordinates": [ 13.0, 53.0 ]},"relation":"contains"}}}
I don't know what I am doing wrong.
I am posting my solution if someone have the same issue...
My solution is to create a JSONObject via ObjectMapper (jackson) and then use JsonData