diff --git a/docs/query-dsl/geo/geo-shape/geo-shape-query-usage.asciidoc b/docs/query-dsl/geo/geo-shape/geo-shape-query-usage.asciidoc index e791bb63b20..6928e2e6e02 100644 --- a/docs/query-dsl/geo/geo-shape/geo-shape-query-usage.asciidoc +++ b/docs/query-dsl/geo/geo-shape/geo-shape-query-usage.asciidoc @@ -79,6 +79,69 @@ new GeoShapeQuery } ---- +[[geo-shape-query-multipoint]] +[float] +== Querying with MultiPoint + +NOTE: Elasticsearch 7.7.0+ required when MultiPoint is indexed using BKD trees (the default). + +==== Fluent DSL example + +[source,csharp] +---- +q +.GeoShape(c => c + .Name("named_query") + .Boost(1.1) + .Field(p => p.LocationShape) + .Shape(s => s + .MultiPoint(MultiPointCoordinates) + ) + .Relation(GeoShapeRelation.Intersects) +) +---- + +==== Object Initializer syntax example + +[source,csharp] +---- +new GeoShapeQuery +{ + Name = "named_query", + Boost = 1.1, + Field = Infer.Field(p => p.LocationShape), + Shape = new MultiPointGeoShape(MultiPointCoordinates), + Relation = GeoShapeRelation.Intersects, +} +---- + +[source,javascript] +.Example json output +---- +{ + "geo_shape": { + "_name": "named_query", + "boost": 1.1, + "locationShape": { + "relation": "intersects", + "shape": { + "type": "multipoint", + "coordinates": [ + [ + 38.897676, + -77.03653 + ], + [ + 38.889939, + -77.009051 + ] + ] + } + } + } +} +---- + [[geo-shape-query-linestring]] [float] == Querying with LineString @@ -823,6 +886,64 @@ new GeoShapeQuery } ---- +[[geo-shape-query-circle]] +[float] +== Querying with Circle + +NOTE: Available in Elasticsearch 7.7.0+ + +==== Fluent DSL example + +[source,csharp] +---- +q +.GeoShape(c => c + .Name("named_query") + .Boost(1.1) + .Field(p => p.LocationShape) + .Shape(s => s + .Circle(CircleCoordinates, "100m") + ) + .Relation(GeoShapeRelation.Intersects) +) +---- + +==== Object Initializer syntax example + +[source,csharp] +---- +new GeoShapeQuery +{ + Name = "named_query", + Boost = 1.1, + Field = Infer.Field(p => p.LocationShape), + Shape = new CircleGeoShape(CircleCoordinates, "100m"), + Relation = GeoShapeRelation.Intersects, +} +---- + +[source,javascript] +.Example json output +---- +{ + "geo_shape": { + "_name": "named_query", + "boost": 1.1, + "locationShape": { + "relation": "intersects", + "shape": { + "type": "circle", + "radius": "100m", + "coordinates": [ + 45.0, + -45.0 + ] + } + } + } +} +---- + [[geo-shape-query-indexedshape]] [float] == Querying with an indexed shape diff --git a/docs/query-dsl/specialized/shape/shape-query-usage.asciidoc b/docs/query-dsl/specialized/shape/shape-query-usage.asciidoc index 6db87c1edfb..87572e1113f 100644 --- a/docs/query-dsl/specialized/shape/shape-query-usage.asciidoc +++ b/docs/query-dsl/specialized/shape/shape-query-usage.asciidoc @@ -76,6 +76,69 @@ new ShapeQuery } ---- +[[shape-query-multipoint]] +[float] +== Querying with MultiPoint + +NOTE: Elasticsearch 7.7.0+ required when MultiPoint is indexed using BKD trees (the default). + +==== Fluent DSL example + +[source,csharp] +---- +q +.Shape(c => c + .Name("named_query") + .Boost(1.1) + .Field(p => p.ArbitraryShape) + .Shape(s => s + .MultiPoint(MultiPointCoordinates) + ) + .Relation(ShapeRelation.Intersects) +) +---- + +==== Object Initializer syntax example + +[source,csharp] +---- +new ShapeQuery +{ + Name = "named_query", + Boost = 1.1, + Field = Infer.Field(p => p.ArbitraryShape), + Shape = new MultiPointGeoShape(MultiPointCoordinates), + Relation = ShapeRelation.Intersects, +} +---- + +[source,javascript] +.Example json output +---- +{ + "shape": { + "_name": "named_query", + "boost": 1.1, + "arbitraryShape": { + "relation": "intersects", + "shape": { + "type": "multipoint", + "coordinates": [ + [ + 38.897676, + -77.03653 + ], + [ + 38.889939, + -77.009051 + ] + ] + } + } + } +} +---- + [[shape-query-linestring]] [float] == Querying with LineString @@ -820,6 +883,64 @@ new ShapeQuery } ---- +[[shape-query-circle]] +[float] +== Querying with Circle + +NOTE: Available in Elasticsearch 7.7.0+ + +==== Fluent DSL example + +[source,csharp] +---- +q +.Shape(c => c + .Name("named_query") + .Boost(1.1) + .Field(p => p.ArbitraryShape) + .Shape(s => s + .Circle(CircleCoordinates, "100m") + ) + .Relation(ShapeRelation.Intersects) +) +---- + +==== Object Initializer syntax example + +[source,csharp] +---- +new ShapeQuery +{ + Name = "named_query", + Boost = 1.1, + Field = Infer.Field(p => p.ArbitraryShape), + Shape = new CircleGeoShape(CircleCoordinates, "100m"), + Relation = ShapeRelation.Intersects, +} +---- + +[source,javascript] +.Example json output +---- +{ + "shape": { + "_name": "named_query", + "boost": 1.1, + "arbitraryShape": { + "relation": "intersects", + "shape": { + "type": "circle", + "radius": "100m", + "coordinates": [ + 45.0, + -45.0 + ] + } + } + } +} +---- + [[shape-query-indexedshape]] [float] == Querying with an indexed shape diff --git a/tests/Tests/QueryDsl/Geo/GeoShape/GeoShapeQueryUsageTests.cs b/tests/Tests/QueryDsl/Geo/GeoShape/GeoShapeQueryUsageTests.cs index 0b9b34f95ca..e3db8325298 100644 --- a/tests/Tests/QueryDsl/Geo/GeoShape/GeoShapeQueryUsageTests.cs +++ b/tests/Tests/QueryDsl/Geo/GeoShape/GeoShapeQueryUsageTests.cs @@ -155,8 +155,14 @@ protected override QueryContainer QueryFluent(QueryContainerDescriptor ); } - // hide - [SkipVersion(">=8.0.0-SNAPSHOT", "multipoint queries are not supported")] + /** + * [float] + * [[geo-shape-query-multipoint]] + * == Querying with MultiPoint + * + * NOTE: Elasticsearch 7.7.0+ required when MultiPoint is indexed using BKD trees (the default). + */ + [SkipVersion("<7.7.0", "multipoint queries are supported from 7.7.0 onwards")] public class GeoShapeMultiPointQueryUsageTests : GeoShapeQueryUsageTestsBase { public GeoShapeMultiPointQueryUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, usage) { } @@ -593,25 +599,14 @@ protected override QueryContainer QueryFluent(QueryContainerDescriptor ); } - // hide - /* - * { - "error" : { - "root_cause" : [ - { - "type" : "unsupported_operation_exception", - "reason" : "CIRCLE geometry is not supported", -"stack_trace" : "[CIRCLE geometry is not supported]; nested: UnsupportedOperationException[CIRCLE geometry is not supported];\n\tat org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:639)\n\tat org.elasticsearch.ElasticsearchException.generateFailureXContent(ElasticsearchException.java:567)\n\tat org.elasticsearch.rest.BytesRestResponse.build(BytesRestResponse.java:138)\n\tat org.elasticsearch.rest.BytesRestResponse.(BytesRestResponse.java:96)\n\tat org.elasticsearch.rest.BytesRestResponse.(BytesRestResponse.java:91)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:243)\n\tat org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:344)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:174)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:322)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:372)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:301)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:69)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:31)\n\tat io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:58)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)\n\tat io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:582)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:536)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:835)\nCaused by: java.lang.UnsupportedOperationException: CIRCLE geometry is not supported\n\tat org.elasticsearch.common.geo.builders.CircleBuilder.buildGeometry(CircleBuilder.java:168)\n\tat org.elasticsearch.common.geo.builders.CircleBuilder.buildGeometry(CircleBuilder.java:37)\n\tat org.elasticsearch.index.query.AbstractGeometryQueryBuilder.(AbstractGeometryQueryBuilder.java:108)\n\tat org.elasticsearch.index.query.GeoShapeQueryBuilder.(GeoShapeQueryBuilder.java:86)\n\tat org.elasticsearch.index.query.GeoShapeQueryBuilder.fromXContent(GeoShapeQueryBuilder.java:273)\n\tat org.elasticsearch.search.SearchModule.lambda$registerQuery$11(SearchModule.java:813)\n\tat org.elasticsearch.common.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:141)\n\tat org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:385)\n\tat org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:314)\n\tat org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1065)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.parseSearchRequest(RestSearchAction.java:121)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.lambda$prepareRequest$1(RestSearchAction.java:100)\n\tat org.elasticsearch.rest.RestRequest.withContentOrSourceParamParserOrNull(RestRequest.java:449)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.prepareRequest(RestSearchAction.java:99)\n\tat org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:92)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:240)\n\t... 49 more\n" - } - ], - "type" : "unsupported_operation_exception", - "reason" : "CIRCLE geometry is not supported", -"stack_trace" : "java.lang.UnsupportedOperationException: CIRCLE geometry is not supported\n\tat org.elasticsearch.common.geo.builders.CircleBuilder.buildGeometry(CircleBuilder.java:168)\n\tat org.elasticsearch.common.geo.builders.CircleBuilder.buildGeometry(CircleBuilder.java:37)\n\tat org.elasticsearch.index.query.AbstractGeometryQueryBuilder.(AbstractGeometryQueryBuilder.java:108)\n\tat org.elasticsearch.index.query.GeoShapeQueryBuilder.(GeoShapeQueryBuilder.java:86)\n\tat org.elasticsearch.index.query.GeoShapeQueryBuilder.fromXContent(GeoShapeQueryBuilder.java:273)\n\tat org.elasticsearch.search.SearchModule.lambda$registerQuery$11(SearchModule.java:813)\n\tat org.elasticsearch.common.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:141)\n\tat org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:385)\n\tat org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:314)\n\tat org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1065)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.parseSearchRequest(RestSearchAction.java:121)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.lambda$prepareRequest$1(RestSearchAction.java:100)\n\tat org.elasticsearch.rest.RestRequest.withContentOrSourceParamParserOrNull(RestRequest.java:449)\n\tat org.elasticsearch.rest.action.search.RestSearchAction.prepareRequest(RestSearchAction.java:99)\n\tat org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:92)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:240)\n\tat org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:344)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:174)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:322)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:372)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:301)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:69)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:31)\n\tat io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:58)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)\n\tat io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:582)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:536)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:835)\n" - }, - "status" : 500 -} - */ - [SkipVersion(">=8.0.0-SNAPSHOT", "CIRCLE geometry is not supported. See https://github.com/elastic/elasticsearch/issues/39237")] + /** + * [float] + * [[geo-shape-query-circle]] + * == Querying with Circle + * + * NOTE: Available in Elasticsearch 7.7.0+ + */ + [SkipVersion("<7.7.0", "CIRCLE geometry is supported from 7.7.0+. See https://github.com/elastic/elasticsearch/issues/39237")] public class GeoShapeCircleQueryUsageTests : GeoShapeQueryUsageTestsBase { public GeoShapeCircleQueryUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, usage) { } diff --git a/tests/Tests/QueryDsl/Specialized/Shape/ShapeQueryUsageTests.cs b/tests/Tests/QueryDsl/Specialized/Shape/ShapeQueryUsageTests.cs index 5de4a3d3df2..60b8073489b 100644 --- a/tests/Tests/QueryDsl/Specialized/Shape/ShapeQueryUsageTests.cs +++ b/tests/Tests/QueryDsl/Specialized/Shape/ShapeQueryUsageTests.cs @@ -153,8 +153,14 @@ protected override QueryContainer QueryFluent(QueryContainerDescriptor ); } - // hide - [SkipVersion(">=7.0.0", "Multipoint queries are not supported in shape queries")] + /** + * [float] + * [[shape-query-multipoint]] + * == Querying with MultiPoint + * + * NOTE: Elasticsearch 7.7.0+ required when MultiPoint is indexed using BKD trees (the default). + */ + [SkipVersion("<7.7.0", "Multipoint shape queries supported in 7.7.0+")] public class ShapeMultiPointQueryUsageTests : ShapeQueryUsageTestsBase { public ShapeMultiPointQueryUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, usage) { } @@ -597,8 +603,14 @@ protected override QueryContainer QueryFluent(QueryContainerDescriptor ); } - // hide - [SkipVersion(">=7.0.0", "Circle queries are not supported in shape queries")] + /** + * [float] + * [[shape-query-circle]] + * == Querying with Circle + * + * NOTE: Available in Elasticsearch 7.7.0+ + */ + [SkipVersion("<7.7.0", "Circle shape queries are supported in 7.7.0+")] public class ShapeCircleQueryUsageTests : ShapeQueryUsageTestsBase { public ShapeCircleQueryUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, usage) { }