From 5bea3898a90079de914314fcd47afaf36a699ae5 Mon Sep 17 00:00:00 2001 From: Ignacio Vera Date: Thu, 31 Oct 2019 08:46:57 +0100 Subject: [PATCH] Add IndexOrDocValuesQuery to GeoPolygonQueryBuilder (#48449) (#48731) --- .../index/query/GeoPolygonQueryBuilder.java | 10 ++++++- .../query/GeoPolygonQueryBuilderTests.java | 29 ++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) 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 a07b4186ed5..47c18e6494d 100644 --- a/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java @@ -19,8 +19,10 @@ package org.elasticsearch.index.query; +import org.apache.lucene.document.LatLonDocValuesField; import org.apache.lucene.document.LatLonPoint; import org.apache.lucene.geo.Polygon; +import org.apache.lucene.search.IndexOrDocValuesQuery; import org.apache.lucene.search.MatchNoDocsQuery; import org.apache.lucene.search.Query; import org.elasticsearch.common.ParseField; @@ -199,7 +201,13 @@ public class GeoPolygonQueryBuilder extends AbstractQueryBuilder points = queryBuilder.points(); + double[] lats = new double[points.size()]; + double[] lons = new double[points.size()]; + for (int i =0; i < points.size(); i++) { + lats[i] = points.get(i).getLat(); + lons[i] = points.get(i).getLon(); + } + org.apache.lucene.geo.Polygon polygon = new org.apache.lucene.geo.Polygon(lats, lons); + assertEquals(LatLonPoint.newPolygonQuery(expectedFieldName, polygon), indexQuery); + Query dvQuery = ((IndexOrDocValuesQuery) query).getRandomAccessQuery(); + assertEquals(LatLonDocValuesField.newSlowPolygonQuery(expectedFieldName, polygon), dvQuery); + } } private static List randomPolygon() { @@ -196,9 +218,8 @@ public class GeoPolygonQueryBuilderTests extends AbstractQueryTestCase