From 4b6915976ce7e3d688711c49179a85942716dbab Mon Sep 17 00:00:00 2001 From: Igor Motov Date: Wed, 23 May 2018 15:15:19 -0400 Subject: [PATCH] Add support for indexed shape routing in geo_shape query (#30760) Adds ability to specify the routing value for the indexed shape in the geo_shape query. Closes #7663 --- .../query-dsl/geo-shape-query.asciidoc | 1 + .../index/query/GeoShapeQueryBuilder.java | 47 ++++++++++++++++++- .../query/GeoShapeQueryBuilderTests.java | 7 +++ .../search/geo/GeoShapeIntegrationIT.java | 38 +++++++++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/docs/reference/query-dsl/geo-shape-query.asciidoc b/docs/reference/query-dsl/geo-shape-query.asciidoc index 08b504951e1..4e00a2f49b4 100644 --- a/docs/reference/query-dsl/geo-shape-query.asciidoc +++ b/docs/reference/query-dsl/geo-shape-query.asciidoc @@ -93,6 +93,7 @@ to 'shapes'. * `type` - Index type where the pre-indexed shape is. * `path` - The field specified as path containing the pre-indexed shape. Defaults to 'shape'. +* `routing` - The routing of the shape document if required. The following is an example of using the Filter with a pre-indexed shape: diff --git a/server/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java index d7d9797dad8..03fb2098180 100644 --- a/server/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/GeoShapeQueryBuilder.java @@ -29,6 +29,7 @@ import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy; import org.apache.lucene.spatial.query.SpatialArgs; import org.apache.lucene.spatial.query.SpatialOperation; import org.apache.lucene.util.SetOnce; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; @@ -77,6 +78,7 @@ public class GeoShapeQueryBuilder extends AbstractQueryBuilder supplier = new SetOnce<>(); queryRewriteContext.registerAsyncAction((client, listener) -> { GetRequest getRequest = new GetRequest(indexedShapeIndex, indexedShapeType, indexedShapeId); + getRequest.routing(indexedShapeRouting); fetch(client, getRequest, indexedShapePath, ActionListener.wrap(builder-> { supplier.set(builder); listener.onResponse(null); diff --git a/server/src/test/java/org/elasticsearch/index/query/GeoShapeQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/GeoShapeQueryBuilderTests.java index 3282077ba6a..6356b2122ed 100644 --- a/server/src/test/java/org/elasticsearch/index/query/GeoShapeQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/GeoShapeQueryBuilderTests.java @@ -59,6 +59,7 @@ public class GeoShapeQueryBuilderTests extends AbstractQueryTestCase