diff --git a/docs/reference/query-dsl/geo-polygon-query.asciidoc b/docs/reference/query-dsl/geo-polygon-query.asciidoc
index c35881332113a..88761f59b0bbc 100644
--- a/docs/reference/query-dsl/geo-polygon-query.asciidoc
+++ b/docs/reference/query-dsl/geo-polygon-query.asciidoc
@@ -4,6 +4,9 @@
Geo-polygon
++++
+deprecated[7.12.0,"Use <> instead,
+where polygons are defined in geojson or wkt."]
+
A query returning hits that only fall within a polygon of
points. Here is an example:
@@ -31,6 +34,7 @@ GET /_search
}
}
--------------------------------------------------
+// TEST[warning:Deprecated field [geo_polygon] used, replaced by [[geo_shape] query where polygons are defined in geojson or wkt]]
[discrete]
==== Query Options
@@ -80,6 +84,7 @@ GET /_search
}
}
--------------------------------------------------
+// TEST[warning:Deprecated field [geo_polygon] used, replaced by [[geo_shape] query where polygons are defined in geojson or wkt]]
[discrete]
===== Lat Lon as String
@@ -110,6 +115,7 @@ GET /_search
}
}
--------------------------------------------------
+// TEST[warning:Deprecated field [geo_polygon] used, replaced by [[geo_shape] query where polygons are defined in geojson or wkt]]
[discrete]
===== Geohash
@@ -138,6 +144,7 @@ GET /_search
}
}
--------------------------------------------------
+// TEST[warning:Deprecated field [geo_polygon] used, replaced by [[geo_shape] query where polygons are defined in geojson or wkt]]
[discrete]
==== geo_point Type
diff --git a/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
index 55277854fb88b..1a2f970cfb6ab 100644
--- a/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
+++ b/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
@@ -32,9 +32,16 @@
import java.util.List;
import java.util.Objects;
+/**
+ * @deprecated use {@link GeoShapeQueryBuilder}
+ */
+@Deprecated
public class GeoPolygonQueryBuilder extends AbstractQueryBuilder {
public static final String NAME = "geo_polygon";
+ public static final String GEO_POLYGON_DEPRECATION_MSG = "[" + GeoShapeQueryBuilder.NAME + "] query " +
+ "where polygons are defined in geojson or wkt";
+
/**
* The default value for ignore_unmapped.
*/
@@ -51,6 +58,7 @@ public class GeoPolygonQueryBuilder extends AbstractQueryBuilder points) {
if (Strings.isEmpty(fieldName)) {
throw new IllegalArgumentException("fieldName must not be null");
diff --git a/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java b/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java
index 4e4aec4282a4a..59bbb7910838e 100644
--- a/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java
+++ b/server/src/main/java/org/elasticsearch/index/query/QueryBuilders.java
@@ -613,7 +613,9 @@ public static GeoBoundingBoxQueryBuilder geoBoundingBoxQuery(String name) {
* A filter to filter based on a polygon defined by a set of locations / points.
*
* @param name The location field name.
+ * @deprecated use {@link #geoIntersectionQuery(String, Geometry)} instead
*/
+ @Deprecated
public static GeoPolygonQueryBuilder geoPolygonQuery(String name, List points) {
return new GeoPolygonQueryBuilder(name, points);
}
diff --git a/server/src/main/java/org/elasticsearch/search/SearchModule.java b/server/src/main/java/org/elasticsearch/search/SearchModule.java
index 5c48676eb18fa..06b229009f0f4 100644
--- a/server/src/main/java/org/elasticsearch/search/SearchModule.java
+++ b/server/src/main/java/org/elasticsearch/search/SearchModule.java
@@ -807,7 +807,9 @@ private void registerQueryParsers(List plugins) {
registerQuery(new QuerySpec<>(GeoDistanceQueryBuilder.NAME, GeoDistanceQueryBuilder::new, GeoDistanceQueryBuilder::fromXContent));
registerQuery(new QuerySpec<>(GeoBoundingBoxQueryBuilder.NAME, GeoBoundingBoxQueryBuilder::new,
GeoBoundingBoxQueryBuilder::fromXContent));
- registerQuery(new QuerySpec<>(GeoPolygonQueryBuilder.NAME, GeoPolygonQueryBuilder::new, GeoPolygonQueryBuilder::fromXContent));
+ registerQuery(new QuerySpec<>(
+ (new ParseField(GeoPolygonQueryBuilder.NAME).withAllDeprecated(GeoPolygonQueryBuilder.GEO_POLYGON_DEPRECATION_MSG)),
+ GeoPolygonQueryBuilder::new, GeoPolygonQueryBuilder::fromXContent));
registerQuery(new QuerySpec<>(ExistsQueryBuilder.NAME, ExistsQueryBuilder::new, ExistsQueryBuilder::fromXContent));
registerQuery(new QuerySpec<>(MatchNoneQueryBuilder.NAME, MatchNoneQueryBuilder::new, MatchNoneQueryBuilder::fromXContent));
registerQuery(new QuerySpec<>(TermsSetQueryBuilder.NAME, TermsSetQueryBuilder::new, TermsSetQueryBuilder::fromXContent));
diff --git a/server/src/test/java/org/elasticsearch/index/query/GeoPolygonQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/GeoPolygonQueryBuilderTests.java
index 0268e21a1e8e1..d696157f00bd5 100644
--- a/server/src/test/java/org/elasticsearch/index/query/GeoPolygonQueryBuilderTests.java
+++ b/server/src/test/java/org/elasticsearch/index/query/GeoPolygonQueryBuilderTests.java
@@ -62,7 +62,7 @@ protected void doAssertLuceneQuery(GeoPolygonQueryBuilder queryBuilder, Query qu
List points = queryBuilder.points();
double[] lats = new double[points.size()];
double[] lons = new double[points.size()];
- for (int i =0; i < points.size(); i++) {
+ for (int i = 0; i < points.size(); i++) {
lats[i] = points.get(i).getLat();
lons[i] = points.get(i).getLon();
}
@@ -73,6 +73,34 @@ protected void doAssertLuceneQuery(GeoPolygonQueryBuilder queryBuilder, Query qu
}
}
+ @Override
+ public void testUnknownField() throws IOException {
+ super.testUnknownField();
+ assertDeprecationWarning();
+ }
+
+ @Override
+ public void testUnknownObjectException() throws IOException {
+ super.testUnknownObjectException();
+ assertDeprecationWarning();
+ }
+
+ @Override
+ public void testFromXContent() throws IOException {
+ super.testFromXContent();
+ assertDeprecationWarning();
+ }
+
+ @Override
+ public void testValidOutput() throws IOException {
+ super.testValidOutput();
+ assertDeprecationWarning();
+ }
+
+ private void assertDeprecationWarning() {
+ assertWarnings("Deprecated field [geo_polygon] used, replaced by [[geo_shape] query where polygons are defined in geojson or wkt]");
+ }
+
private static List randomPolygon() {
ShapeBuilder, ?, ?> shapeBuilder = null;
// This is a temporary fix because sometimes the RandomShapeGenerator
@@ -97,7 +125,7 @@ public void testNullFieldName() {
public void testEmptyPolygon() {
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
- () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, Collections.emptyList()));
+ () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, Collections.emptyList()));
assertEquals("polygon must not be null or empty", e.getMessage());
e = expectThrows(IllegalArgumentException.class, () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, null));
@@ -110,7 +138,7 @@ public void testInvalidClosedPolygon() {
points.add(new GeoPoint(90, 90));
points.add(new GeoPoint(0, 90));
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
- () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, points));
+ () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, points));
assertEquals("too few points defined for geo_polygon query", e.getMessage());
}
@@ -119,91 +147,96 @@ public void testInvalidOpenPolygon() {
points.add(new GeoPoint(0, 90));
points.add(new GeoPoint(90, 90));
IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
- () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, points));
+ () -> new GeoPolygonQueryBuilder(GEO_POINT_FIELD_NAME, points));
assertEquals("too few points defined for geo_polygon query", e.getMessage());
}
public void testParsingAndToQueryParsingExceptions() throws IOException {
String[] brokenFiles = new String[]{
- "/org/elasticsearch/index/query/geo_polygon_exception_1.json",
- "/org/elasticsearch/index/query/geo_polygon_exception_2.json",
- "/org/elasticsearch/index/query/geo_polygon_exception_3.json",
- "/org/elasticsearch/index/query/geo_polygon_exception_4.json",
- "/org/elasticsearch/index/query/geo_polygon_exception_5.json"
+ "/org/elasticsearch/index/query/geo_polygon_exception_1.json",
+ "/org/elasticsearch/index/query/geo_polygon_exception_2.json",
+ "/org/elasticsearch/index/query/geo_polygon_exception_3.json",
+ "/org/elasticsearch/index/query/geo_polygon_exception_4.json",
+ "/org/elasticsearch/index/query/geo_polygon_exception_5.json"
};
for (String brokenFile : brokenFiles) {
String query = copyToStringFromClasspath(brokenFile);
expectThrows(ParsingException.class, () -> parseQuery(query));
}
+ assertDeprecationWarning();
}
public void testParsingAndToQuery1() throws IOException {
String query = "{\n" +
- " \"geo_polygon\":{\n" +
- " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
- " \"points\":[\n" +
- " [-70, 40],\n" +
- " [-80, 30],\n" +
- " [-90, 20]\n" +
- " ]\n" +
- " }\n" +
- " }\n" +
- "}\n";
+ " \"geo_polygon\":{\n" +
+ " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
+ " \"points\":[\n" +
+ " [-70, 40],\n" +
+ " [-80, 30],\n" +
+ " [-90, 20]\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
assertGeoPolygonQuery(query);
+ assertDeprecationWarning();
}
public void testParsingAndToQuery2() throws IOException {
String query = "{\n" +
- " \"geo_polygon\":{\n" +
- " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
- " \"points\":[\n" +
- " {\n" +
- " \"lat\":40,\n" +
- " \"lon\":-70\n" +
- " },\n" +
- " {\n" +
- " \"lat\":30,\n" +
- " \"lon\":-80\n" +
- " },\n" +
- " {\n" +
- " \"lat\":20,\n" +
- " \"lon\":-90\n" +
- " }\n" +
- " ]\n" +
- " }\n" +
- " }\n" +
- "}\n";
+ " \"geo_polygon\":{\n" +
+ " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
+ " \"points\":[\n" +
+ " {\n" +
+ " \"lat\":40,\n" +
+ " \"lon\":-70\n" +
+ " },\n" +
+ " {\n" +
+ " \"lat\":30,\n" +
+ " \"lon\":-80\n" +
+ " },\n" +
+ " {\n" +
+ " \"lat\":20,\n" +
+ " \"lon\":-90\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
assertGeoPolygonQuery(query);
+ assertDeprecationWarning();
}
public void testParsingAndToQuery3() throws IOException {
String query = "{\n" +
- " \"geo_polygon\":{\n" +
- " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
- " \"points\":[\n" +
- " \"40, -70\",\n" +
- " \"30, -80\",\n" +
- " \"20, -90\"\n" +
- " ]\n" +
- " }\n" +
- " }\n" +
- "}\n";
+ " \"geo_polygon\":{\n" +
+ " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
+ " \"points\":[\n" +
+ " \"40, -70\",\n" +
+ " \"30, -80\",\n" +
+ " \"20, -90\"\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
assertGeoPolygonQuery(query);
+ assertDeprecationWarning();
}
public void testParsingAndToQuery4() throws IOException {
String query = "{\n" +
- " \"geo_polygon\":{\n" +
- " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
- " \"points\":[\n" +
- " \"drn5x1g8cu2y\",\n" +
- " \"30, -80\",\n" +
- " \"20, -90\"\n" +
- " ]\n" +
- " }\n" +
- " }\n" +
- "}\n";
+ " \"geo_polygon\":{\n" +
+ " \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
+ " \"points\":[\n" +
+ " \"drn5x1g8cu2y\",\n" +
+ " \"30, -80\",\n" +
+ " \"20, -90\"\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
assertGeoPolygonQuery(query);
+ assertDeprecationWarning();
}
private void assertGeoPolygonQuery(String query) throws IOException {
@@ -214,7 +247,7 @@ private void assertGeoPolygonQuery(String query) throws IOException {
public void testFromJson() throws IOException {
String json =
- "{\n" +
+ "{\n" +
" \"geo_polygon\" : {\n" +
" \"person.location\" : {\n" +
" \"points\" : [ [ -70.0, 40.0 ], [ -80.0, 30.0 ], [ -90.0, 20.0 ], [ -70.0, 40.0 ] ]\n" +
@@ -227,6 +260,7 @@ public void testFromJson() throws IOException {
GeoPolygonQueryBuilder parsed = (GeoPolygonQueryBuilder) parseQuery(json);
checkGeneratedJson(json, parsed);
assertEquals(json, 4, parsed.points().size());
+ assertDeprecationWarning();
}
public void testIgnoreUnmapped() throws IOException {
@@ -274,5 +308,6 @@ public void testPointValidation() throws IOException {
QueryShardException e2 = expectThrows(QueryShardException.class, () -> parseQuery(queryInvalidLon).toQuery(context));
assertThat(e2.getMessage(), containsString("illegal longitude value [-190.0] for [geo_polygon]"));
+ assertDeprecationWarning();
}
}
diff --git a/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java b/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java
index 064b604fe8f0b..fc3dd9b3a87af 100644
--- a/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java
+++ b/server/src/test/java/org/elasticsearch/search/SearchModuleTests.java
@@ -307,7 +307,6 @@ public List> getRescorers() {
"fuzzy",
"geo_bounding_box",
"geo_distance",
- "geo_polygon",
"geo_shape",
"ids",
"intervals",
@@ -345,7 +344,7 @@ public List> getRescorers() {
};
//add here deprecated queries to make sure we log a deprecation warnings when they are used
- private static final String[] DEPRECATED_QUERIES = new String[] {};
+ private static final String[] DEPRECATED_QUERIES = new String[] {"geo_polygon"};
/**
* Dummy test {@link AggregationBuilder} used to test registering aggregation builders.