summaryrefslogtreecommitdiff
path: root/core/src/main/java/org
diff options
context:
space:
mode:
authorAdrien Grand <jpountz@gmail.com>2016-04-01 11:30:10 +0200
committerNicholas Knize <nknize@gmail.com>2016-04-11 16:50:04 -0500
commit496c7fbd846e105ef89b941d026e86f3f908f3ee (patch)
tree890a19ea484804252a0237df224ee37c6aeeb8d5 /core/src/main/java/org
parent56f061b0b4fd773f0467f3ea385da54cfb1db526 (diff)
Upgrade Lucene 6 Release
* upgrades numerics to new Point format * updates geo api changes * adds GeoPointDistanceRangeQuery as XGeoPointDistanceRangeQuery * cuts over to ES GeoHashUtils
Diffstat (limited to 'core/src/main/java/org')
-rw-r--r--core/src/main/java/org/apache/lucene/spatial/geopoint/search/XGeoPointDistanceRangeQuery.java126
-rw-r--r--core/src/main/java/org/elasticsearch/common/geo/GeoDistance.java13
-rw-r--r--core/src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java284
-rw-r--r--core/src/main/java/org/elasticsearch/common/geo/GeoPoint.java4
-rw-r--r--core/src/main/java/org/elasticsearch/common/geo/GeoUtils.java10
-rw-r--r--core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractIndexGeoPointFieldData.java1
-rw-r--r--core/src/main/java/org/elasticsearch/index/mapper/geo/BaseGeoPointFieldMapper.java3
-rw-r--r--core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java4
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeQueryBuilder.java6
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/GeohashCellQuery.java2
-rw-r--r--core/src/main/java/org/elasticsearch/search/DocValueFormat.java2
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoGridAggregatorBuilder.java4
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java2
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java2
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java2
-rw-r--r--core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java4
19 files changed, 435 insertions, 40 deletions
diff --git a/core/src/main/java/org/apache/lucene/spatial/geopoint/search/XGeoPointDistanceRangeQuery.java b/core/src/main/java/org/apache/lucene/spatial/geopoint/search/XGeoPointDistanceRangeQuery.java
new file mode 100644
index 0000000000..e031beee81
--- /dev/null
+++ b/core/src/main/java/org/apache/lucene/spatial/geopoint/search/XGeoPointDistanceRangeQuery.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.lucene.spatial.geopoint.search;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.spatial.geopoint.document.GeoPointField.TermEncoding;
+
+/** Implements a point distance range query on a GeoPoint field. This is based on
+ * {@code org.apache.lucene.spatial.geopoint.search.GeoPointDistanceQuery} and is implemented using a
+ * {@code org.apache.lucene.search.BooleanClause.MUST_NOT} clause to exclude any points that fall within
+ * minRadiusMeters from the provided point.
+ * <p>
+ * NOTE: this query does not correctly support multi-value docs (see: https://issues.apache.org/jira/browse/LUCENE-7126)
+ * <br>
+ * TODO: remove this per ISSUE #17658
+ *
+ * @lucene.experimental
+ */
+public final class XGeoPointDistanceRangeQuery extends GeoPointDistanceQuery {
+ /** minimum distance range (in meters) from lat, lon center location, maximum is inherited */
+ protected final double minRadiusMeters;
+
+ /**
+ * Constructs a query for all {@link org.apache.lucene.spatial.geopoint.document.GeoPointField} types within a minimum / maximum
+ * distance (in meters) range from a given point
+ */
+ public XGeoPointDistanceRangeQuery(final String field, final double centerLat, final double centerLon,
+ final double minRadiusMeters, final double maxRadiusMeters) {
+ this(field, TermEncoding.PREFIX, centerLat, centerLon, minRadiusMeters, maxRadiusMeters);
+ }
+
+ /**
+ * Constructs a query for all {@link org.apache.lucene.spatial.geopoint.document.GeoPointField} types within a minimum / maximum
+ * distance (in meters) range from a given point. Accepts an optional
+ * {@link org.apache.lucene.spatial.geopoint.document.GeoPointField.TermEncoding}
+ */
+ public XGeoPointDistanceRangeQuery(final String field, final TermEncoding termEncoding, final double centerLat, final double centerLon,
+ final double minRadiusMeters, final double maxRadius) {
+ super(field, termEncoding, centerLat, centerLon, maxRadius);
+ this.minRadiusMeters = minRadiusMeters;
+ }
+
+ @Override
+ public Query rewrite(IndexReader reader) {
+ Query q = super.rewrite(reader);
+ if (minRadiusMeters == 0.0) {
+ return q;
+ }
+
+ // add an exclusion query
+ BooleanQuery.Builder bqb = new BooleanQuery.Builder();
+
+ // create a new exclusion query
+ GeoPointDistanceQuery exclude = new GeoPointDistanceQuery(field, termEncoding, centerLat, centerLon, minRadiusMeters);
+ // full map search
+// if (radiusMeters >= GeoProjectionUtils.SEMIMINOR_AXIS) {
+// bqb.add(new BooleanClause(new GeoPointInBBoxQuery(this.field, -180.0, -90.0, 180.0, 90.0), BooleanClause.Occur.MUST));
+// } else {
+ bqb.add(new BooleanClause(q, BooleanClause.Occur.MUST));
+// }
+ bqb.add(new BooleanClause(exclude, BooleanClause.Occur.MUST_NOT));
+
+ return bqb.build();
+ }
+
+ @Override
+ public String toString(String field) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(':');
+ if (!this.field.equals(field)) {
+ sb.append(" field=");
+ sb.append(this.field);
+ sb.append(':');
+ }
+ return sb.append( " Center: [")
+ .append(centerLat)
+ .append(',')
+ .append(centerLon)
+ .append(']')
+ .append(" From Distance: ")
+ .append(minRadiusMeters)
+ .append(" m")
+ .append(" To Distance: ")
+ .append(radiusMeters)
+ .append(" m")
+ .append(" Lower Left: [")
+ .append(minLat)
+ .append(',')
+ .append(minLon)
+ .append(']')
+ .append(" Upper Right: [")
+ .append(maxLat)
+ .append(',')
+ .append(maxLon)
+ .append("]")
+ .toString();
+ }
+
+ /** getter method for minimum distance */
+ public double getMinRadiusMeters() {
+ return this.minRadiusMeters;
+ }
+
+ /** getter method for maximum distance */
+ public double getMaxRadiusMeters() {
+ return this.radiusMeters;
+ }
+}
diff --git a/core/src/main/java/org/elasticsearch/common/geo/GeoDistance.java b/core/src/main/java/org/elasticsearch/common/geo/GeoDistance.java
index 69a7d1f3e5..b9edb9975b 100644
--- a/core/src/main/java/org/elasticsearch/common/geo/GeoDistance.java
+++ b/core/src/main/java/org/elasticsearch/common/geo/GeoDistance.java
@@ -89,14 +89,8 @@ public enum GeoDistance implements Writeable<GeoDistance> {
ARC {
@Override
public double calculate(double sourceLatitude, double sourceLongitude, double targetLatitude, double targetLongitude, DistanceUnit unit) {
- double x1 = sourceLatitude * Math.PI / 180D;
- double x2 = targetLatitude * Math.PI / 180D;
- double h1 = 1D - Math.cos(x1 - x2);
- double h2 = 1D - Math.cos((sourceLongitude - targetLongitude) * Math.PI / 180D);
- double h = (h1 + Math.cos(x1) * Math.cos(x2) * h2) / 2;
- double averageLatitude = (x1 + x2) / 2;
- double diameter = GeoUtils.earthDiameter(averageLatitude);
- return unit.fromMeters(diameter * Math.asin(Math.min(1, Math.sqrt(h))));
+ double result = SloppyMath.haversinMeters(sourceLatitude, sourceLongitude, targetLatitude, targetLongitude);
+ return unit.fromMeters(result);
}
@Override
@@ -113,6 +107,7 @@ public enum GeoDistance implements Writeable<GeoDistance> {
* Calculates distance as points on a globe in a sloppy way. Close to the pole areas the accuracy
* of this function decreases.
*/
+ @Deprecated
SLOPPY_ARC {
@Override
@@ -122,7 +117,7 @@ public enum GeoDistance implements Writeable<GeoDistance> {
@Override
public double calculate(double sourceLatitude, double sourceLongitude, double targetLatitude, double targetLongitude, DistanceUnit unit) {
- return unit.fromMeters(SloppyMath.haversin(sourceLatitude, sourceLongitude, targetLatitude, targetLongitude) * 1000.0);
+ return unit.fromMeters(SloppyMath.haversinMeters(sourceLatitude, sourceLongitude, targetLatitude, targetLongitude));
}
@Override
diff --git a/core/src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java b/core/src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java
new file mode 100644
index 0000000000..999a0e7e7d
--- /dev/null
+++ b/core/src/main/java/org/elasticsearch/common/geo/GeoHashUtils.java
@@ -0,0 +1,284 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.elasticsearch.common.geo;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.lucene.spatial.util.GeoEncodingUtils;
+import org.apache.lucene.util.BitUtil;
+
+/**
+ * Utilities for converting to/from the GeoHash standard
+ *
+ * The geohash long format is represented as lon/lat (x/y) interleaved with the 4 least significant bits
+ * representing the level (1-12) [xyxy...xyxyllll]
+ *
+ * This differs from a morton encoded value which interleaves lat/lon (y/x).
+ *
+ * @lucene.experimental
+ */
+public class GeoHashUtils {
+ private static final char[] BASE_32 = {'0', '1', '2', '3', '4', '5', '6',
+ '7', '8', '9', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
+
+ private static final String BASE_32_STRING = new String(BASE_32);
+
+ /** maximum precision for geohash strings */
+ public static final int PRECISION = 12;
+ private static final short MORTON_OFFSET = (GeoEncodingUtils.BITS<<1) - (PRECISION*5);
+
+ // No instance:
+ private GeoHashUtils() {
+ }
+
+ /**
+ * Encode lon/lat to the geohash based long format (lon/lat interleaved, 4 least significant bits = level)
+ */
+ public static final long longEncode(final double lon, final double lat, final int level) {
+ // shift to appropriate level
+ final short msf = (short)(((12 - level) * 5) + MORTON_OFFSET);
+ return ((BitUtil.flipFlop(GeoEncodingUtils.mortonHash(lat, lon)) >>> msf) << 4) | level;
+ }
+
+ /**
+ * Encode from geohash string to the geohash based long format (lon/lat interleaved, 4 least significant bits = level)
+ */
+ public static final long longEncode(final String hash) {
+ int level = hash.length()-1;
+ long b;
+ long l = 0L;
+ for(char c : hash.toCharArray()) {
+ b = (long)(BASE_32_STRING.indexOf(c));
+ l |= (b<<(level--*5));
+ }
+ return (l<<4)|hash.length();
+ }
+
+ /**
+ * Encode an existing geohash long to the provided precision
+ */
+ public static long longEncode(long geohash, int level) {
+ final short precision = (short)(geohash & 15);
+ if (precision == level) {
+ return geohash;
+ } else if (precision > level) {
+ return ((geohash >>> (((precision - level) * 5) + 4)) << 4) | level;
+ }
+ return ((geohash >>> 4) << (((level - precision) * 5) + 4) | level);
+ }
+
+ /**
+ * Convert from a morton encoded long from a geohash encoded long
+ */
+ public static long fromMorton(long morton, int level) {
+ long mFlipped = BitUtil.flipFlop(morton);
+ mFlipped >>>= (((GeoHashUtils.PRECISION - level) * 5) + MORTON_OFFSET);
+ return (mFlipped << 4) | level;
+ }
+
+ /**
+ * Encode to a geohash string from the geohash based long format
+ */
+ public static final String stringEncode(long geoHashLong) {
+ int level = (int)geoHashLong&15;
+ geoHashLong >>>= 4;
+ char[] chars = new char[level];
+ do {
+ chars[--level] = BASE_32[(int) (geoHashLong&31L)];
+ geoHashLong>>>=5;
+ } while(level > 0);
+
+ return new String(chars);
+ }
+
+ /**
+ * Encode to a geohash string from full resolution longitude, latitude)
+ */
+ public static final String stringEncode(final double lon, final double lat) {
+ return stringEncode(lon, lat, 12);
+ }
+
+ /**
+ * Encode to a level specific geohash string from full resolution longitude, latitude
+ */
+ public static final String stringEncode(final double lon, final double lat, final int level) {
+ // convert to geohashlong
+ final long ghLong = fromMorton(GeoEncodingUtils.mortonHash(lat, lon), level);
+ return stringEncode(ghLong);
+
+ }
+
+ /**
+ * Encode to a full precision geohash string from a given morton encoded long value
+ */
+ public static final String stringEncodeFromMortonLong(final long hashedVal) throws Exception {
+ return stringEncode(hashedVal, PRECISION);
+ }
+
+ /**
+ * Encode to a geohash string at a given level from a morton long
+ */
+ public static final String stringEncodeFromMortonLong(long hashedVal, final int level) {
+ // bit twiddle to geohash (since geohash is a swapped (lon/lat) encoding)
+ hashedVal = BitUtil.flipFlop(hashedVal);
+
+ StringBuilder geoHash = new StringBuilder();
+ short precision = 0;
+ final short msf = (GeoEncodingUtils.BITS<<1)-5;
+ long mask = 31L<<msf;
+ do {
+ geoHash.append(BASE_32[(int)((mask & hashedVal)>>>(msf-(precision*5)))]);
+ // next 5 bits
+ mask >>>= 5;
+ } while (++precision < level);
+ return geoHash.toString();
+ }
+
+ /**
+ * Encode to a morton long value from a given geohash string
+ */
+ public static final long mortonEncode(final String hash) {
+ int level = 11;
+ long b;
+ long l = 0L;
+ for(char c : hash.toCharArray()) {
+ b = (long)(BASE_32_STRING.indexOf(c));
+ l |= (b<<((level--*5) + MORTON_OFFSET));
+ }
+ return BitUtil.flipFlop(l);
+ }
+
+ /**
+ * Encode to a morton long value from a given geohash long value
+ */
+ public static final long mortonEncode(final long geoHashLong) {
+ final int level = (int)(geoHashLong&15);
+ final short odd = (short)(level & 1);
+
+ return BitUtil.flipFlop(((geoHashLong >>> 4) << odd) << (((12 - level) * 5) + (MORTON_OFFSET - odd)));
+ }
+
+ private static final char encode(int x, int y) {
+ return BASE_32[((x & 1) + ((y & 1) * 2) + ((x & 2) * 2) + ((y & 2) * 4) + ((x & 4) * 4)) % 32];
+ }
+
+ /**
+ * Calculate all neighbors of a given geohash cell.
+ *
+ * @param geohash Geohash of the defined cell
+ * @return geohashes of all neighbor cells
+ */
+ public static Collection<? extends CharSequence> neighbors(String geohash) {
+ return addNeighbors(geohash, geohash.length(), new ArrayList<CharSequence>(8));
+ }
+
+ /**
+ * Calculate the geohash of a neighbor of a geohash
+ *
+ * @param geohash the geohash of a cell
+ * @param level level of the geohash
+ * @param dx delta of the first grid coordinate (must be -1, 0 or +1)
+ * @param dy delta of the second grid coordinate (must be -1, 0 or +1)
+ * @return geohash of the defined cell
+ */
+ public final static String neighbor(String geohash, int level, int dx, int dy) {
+ int cell = BASE_32_STRING.indexOf(geohash.charAt(level -1));
+
+ // Decoding the Geohash bit pattern to determine grid coordinates
+ int x0 = cell & 1; // first bit of x
+ int y0 = cell & 2; // first bit of y
+ int x1 = cell & 4; // second bit of x
+ int y1 = cell & 8; // second bit of y
+ int x2 = cell & 16; // third bit of x
+
+ // combine the bitpattern to grid coordinates.
+ // note that the semantics of x and y are swapping
+ // on each level
+ int x = x0 + (x1 / 2) + (x2 / 4);
+ int y = (y0 / 2) + (y1 / 4);
+
+ if (level == 1) {
+ // Root cells at north (namely "bcfguvyz") or at
+ // south (namely "0145hjnp") do not have neighbors
+ // in north/south direction
+ if ((dy < 0 && y == 0) || (dy > 0 && y == 3)) {
+ return null;
+ } else {
+ return Character.toString(encode(x + dx, y + dy));
+ }
+ } else {
+ // define grid coordinates for next level
+ final int nx = ((level % 2) == 1) ? (x + dx) : (x + dy);
+ final int ny = ((level % 2) == 1) ? (y + dy) : (y + dx);
+
+ // if the defined neighbor has the same parent a the current cell
+ // encode the cell directly. Otherwise find the cell next to this
+ // cell recursively. Since encoding wraps around within a cell
+ // it can be encoded here.
+ // xLimit and YLimit must always be respectively 7 and 3
+ // since x and y semantics are swapping on each level.
+ if (nx >= 0 && nx <= 7 && ny >= 0 && ny <= 3) {
+ return geohash.substring(0, level - 1) + encode(nx, ny);
+ } else {
+ String neighbor = neighbor(geohash, level - 1, dx, dy);
+ return (neighbor != null) ? neighbor + encode(nx, ny) : neighbor;
+ }
+ }
+ }
+
+ /**
+ * Add all geohashes of the cells next to a given geohash to a list.
+ *
+ * @param geohash Geohash of a specified cell
+ * @param neighbors list to add the neighbors to
+ * @return the given list
+ */
+ public static final <E extends Collection<? super String>> E addNeighbors(String geohash, E neighbors) {
+ return addNeighbors(geohash, geohash.length(), neighbors);
+ }
+
+ /**
+ * Add all geohashes of the cells next to a given geohash to a list.
+ *
+ * @param geohash Geohash of a specified cell
+ * @param length level of the given geohash
+ * @param neighbors list to add the neighbors to
+ * @return the given list
+ */
+ public static final <E extends Collection<? super String>> E addNeighbors(String geohash, int length, E neighbors) {
+ String south = neighbor(geohash, length, 0, -1);
+ String north = neighbor(geohash, length, 0, +1);
+ if (north != null) {
+ neighbors.add(neighbor(north, length, -1, 0));
+ neighbors.add(north);
+ neighbors.add(neighbor(north, length, +1, 0));
+ }
+
+ neighbors.add(neighbor(geohash, length, -1, 0));
+ neighbors.add(neighbor(geohash, length, +1, 0));
+
+ if (south != null) {
+ neighbors.add(neighbor(south, length, -1, 0));
+ neighbors.add(south);
+ neighbors.add(neighbor(south, length, +1, 0));
+ }
+
+ return neighbors;
+ }
+}
diff --git a/core/src/main/java/org/elasticsearch/common/geo/GeoPoint.java b/core/src/main/java/org/elasticsearch/common/geo/GeoPoint.java
index e233c84f47..7713157422 100644
--- a/core/src/main/java/org/elasticsearch/common/geo/GeoPoint.java
+++ b/core/src/main/java/org/elasticsearch/common/geo/GeoPoint.java
@@ -21,8 +21,8 @@ package org.elasticsearch.common.geo;
import org.apache.lucene.util.BitUtil;
-import static org.apache.lucene.spatial.util.GeoHashUtils.mortonEncode;
-import static org.apache.lucene.spatial.util.GeoHashUtils.stringEncode;
+import static org.elasticsearch.common.geo.GeoHashUtils.mortonEncode;
+import static org.elasticsearch.common.geo.GeoHashUtils.stringEncode;
import static org.apache.lucene.spatial.util.GeoEncodingUtils.mortonUnhashLat;
import static org.apache.lucene.spatial.util.GeoEncodingUtils.mortonUnhashLon;
diff --git a/core/src/main/java/org/elasticsearch/common/geo/GeoUtils.java b/core/src/main/java/org/elasticsearch/common/geo/GeoUtils.java
index 424d7cea68..d5cc684686 100644
--- a/core/src/main/java/org/elasticsearch/common/geo/GeoUtils.java
+++ b/core/src/main/java/org/elasticsearch/common/geo/GeoUtils.java
@@ -71,7 +71,7 @@ public class GeoUtils {
* maximum distance/radius from the point 'center' before overlapping
**/
public static double maxRadialDistance(GeoPoint center, double initialRadius) {
- final double maxRadius = maxRadialDistanceMeters(center.lon(), center.lat());
+ final double maxRadius = maxRadialDistanceMeters(center.lat(), center.lon());
return Math.min(initialRadius, maxRadius);
}
@@ -92,14 +92,6 @@ public class GeoUtils {
}
/**
- * Return an approximate value of the diameter of the earth (in meters) at the given latitude (in radians).
- */
- public static double earthDiameter(double latitude) {
- // SloppyMath impl returns a result in kilometers
- return SloppyMath.earthDiameter(latitude) * 1000;
- }
-
- /**
* Calculate the width (in meters) of geohash cells at a specific level
* @param level geohash level must be greater or equal to zero
* @return the width of cells at level in meters
diff --git a/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractIndexGeoPointFieldData.java b/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractIndexGeoPointFieldData.java
index 4e0eb21866..c18f96c06b 100644
--- a/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractIndexGeoPointFieldData.java
+++ b/core/src/main/java/org/elasticsearch/index/fielddata/plain/AbstractIndexGeoPointFieldData.java
@@ -25,7 +25,6 @@ import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefIterator;
import org.apache.lucene.util.CharsRefBuilder;
import org.apache.lucene.util.LegacyNumericUtils;
-import org.elasticsearch.Version;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.IndexSettings;
diff --git a/core/src/main/java/org/elasticsearch/index/mapper/geo/BaseGeoPointFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/geo/BaseGeoPointFieldMapper.java
index 03c475e5d8..7284d437db 100644
--- a/core/src/main/java/org/elasticsearch/index/mapper/geo/BaseGeoPointFieldMapper.java
+++ b/core/src/main/java/org/elasticsearch/index/mapper/geo/BaseGeoPointFieldMapper.java
@@ -20,7 +20,7 @@
package org.elasticsearch.index.mapper.geo;
import org.apache.lucene.document.Field;
-import org.apache.lucene.spatial.util.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.apache.lucene.util.LegacyNumericUtils;
import org.elasticsearch.Version;
import org.elasticsearch.ElasticsearchParseException;
@@ -57,7 +57,6 @@ import java.util.List;
import java.util.Map;
import static org.elasticsearch.index.mapper.core.TypeParsers.parseField;
-import static org.elasticsearch.index.mapper.core.TypeParsers.parseMultiField;
/**
* GeoPointFieldMapper base class to maintain backward compatibility
diff --git a/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java
index 75c082dd43..f46addcabc 100644
--- a/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java
+++ b/core/src/main/java/org/elasticsearch/index/mapper/geo/GeoPointFieldMapper.java
@@ -129,7 +129,7 @@ public class GeoPointFieldMapper extends BaseGeoPointFieldMapper {
GeoUtils.normalizePoint(point);
}
if (fieldType().indexOptions() != IndexOptions.NONE || fieldType().stored()) {
- context.doc().add(new GeoPointField(fieldType().name(), point.lon(), point.lat(), fieldType() ));
+ context.doc().add(new GeoPointField(fieldType().name(), point.lat(), point.lon(), fieldType()));
}
super.parse(context, point, geoHash);
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java
index 521ebfac61..07807ac49c 100644
--- a/core/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/GeoBoundingBoxQueryBuilder.java
@@ -291,8 +291,8 @@ public class GeoBoundingBoxQueryBuilder extends AbstractQueryBuilder<GeoBounding
// if index created V_2_3 > use prefix encoded postings format
final GeoPointField.TermEncoding encoding = (indexVersionCreated.before(Version.V_2_3_0)) ?
GeoPointField.TermEncoding.NUMERIC : GeoPointField.TermEncoding.PREFIX;
- return new GeoPointInBBoxQuery(fieldType.name(), encoding, luceneTopLeft.lon(), luceneBottomRight.lat(),
- luceneBottomRight.lon(), luceneTopLeft.lat());
+ return new GeoPointInBBoxQuery(fieldType.name(), encoding, luceneBottomRight.lat(), luceneTopLeft.lat(),
+ luceneTopLeft.lon(), luceneBottomRight.lon());
}
Query query;
diff --git a/core/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java
index 9acd576611..817a73327a 100644
--- a/core/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/GeoDistanceQueryBuilder.java
@@ -257,7 +257,7 @@ public class GeoDistanceQueryBuilder extends AbstractQueryBuilder<GeoDistanceQue
final GeoPointField.TermEncoding encoding = (indexVersionCreated.before(Version.V_2_3_0)) ?
GeoPointField.TermEncoding.NUMERIC : GeoPointField.TermEncoding.PREFIX;
normDistance = GeoUtils.maxRadialDistance(center, normDistance);
- return new GeoPointDistanceQuery(fieldType.name(), encoding, center.lon(), center.lat(), normDistance);
+ return new GeoPointDistanceQuery(fieldType.name(), encoding, center.lat(), center.lon(), normDistance);
}
@Override
diff --git a/core/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeQueryBuilder.java
index 18b0506fca..e7c471f086 100644
--- a/core/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/GeoDistanceRangeQueryBuilder.java
@@ -21,7 +21,7 @@ package org.elasticsearch.index.query;
import org.apache.lucene.search.Query;
import org.apache.lucene.spatial.geopoint.document.GeoPointField;
-import org.apache.lucene.spatial.geopoint.search.GeoPointDistanceRangeQuery;
+import org.apache.lucene.spatial.geopoint.search.XGeoPointDistanceRangeQuery;
import org.apache.lucene.spatial.util.GeoDistanceUtils;
import org.elasticsearch.Version;
import org.elasticsearch.common.ParseField;
@@ -288,7 +288,7 @@ public class GeoDistanceRangeQueryBuilder extends AbstractQueryBuilder<GeoDistan
toValue = geoDistance.normalize(toValue, DistanceUnit.DEFAULT);
}
} else {
- toValue = GeoDistanceUtils.maxRadialDistanceMeters(point.lon(), point.lat());
+ toValue = GeoDistanceUtils.maxRadialDistanceMeters(point.lat(), point.lon());
}
final Version indexVersionCreated = context.indexVersionCreated();
@@ -304,7 +304,7 @@ public class GeoDistanceRangeQueryBuilder extends AbstractQueryBuilder<GeoDistan
final GeoPointField.TermEncoding encoding = (indexVersionCreated.before(Version.V_2_3_0)) ?
GeoPointField.TermEncoding.NUMERIC : GeoPointField.TermEncoding.PREFIX;
- return new GeoPointDistanceRangeQuery(fieldType.name(), encoding, point.lon(), point.lat(),
+ return new XGeoPointDistanceRangeQuery(fieldType.name(), encoding, point.lat(), point.lon(),
(includeLower) ? fromValue : fromValue + TOLERANCE,
(includeUpper) ? toValue : toValue - TOLERANCE);
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
index 94d74bef0f..5950522b9f 100644
--- a/core/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java
@@ -165,7 +165,7 @@ public class GeoPolygonQueryBuilder extends AbstractQueryBuilder<GeoPolygonQuery
// if index created V_2_3 > use prefix encoded postings format
final GeoPointField.TermEncoding encoding = (indexVersionCreated.before(Version.V_2_3_0)) ?
GeoPointField.TermEncoding.NUMERIC : GeoPointField.TermEncoding.PREFIX;
- return new GeoPointInPolygonQuery(fieldType.name(), encoding, lons, lats);
+ return new GeoPointInPolygonQuery(fieldType.name(), encoding, lats, lons);
}
@Override
diff --git a/core/src/main/java/org/elasticsearch/index/query/GeohashCellQuery.java b/core/src/main/java/org/elasticsearch/index/query/GeohashCellQuery.java
index 0332e303e6..c34d423ca3 100644
--- a/core/src/main/java/org/elasticsearch/index/query/GeohashCellQuery.java
+++ b/core/src/main/java/org/elasticsearch/index/query/GeohashCellQuery.java
@@ -20,7 +20,7 @@
package org.elasticsearch.index.query;
import org.apache.lucene.search.Query;
-import org.apache.lucene.spatial.util.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.elasticsearch.ElasticsearchParseException;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.ParseField;
diff --git a/core/src/main/java/org/elasticsearch/search/DocValueFormat.java b/core/src/main/java/org/elasticsearch/search/DocValueFormat.java
index f1746a9c55..3b9d3f678b 100644
--- a/core/src/main/java/org/elasticsearch/search/DocValueFormat.java
+++ b/core/src/main/java/org/elasticsearch/search/DocValueFormat.java
@@ -20,8 +20,8 @@
package org.elasticsearch.search;
import org.apache.lucene.index.Term;
-import org.apache.lucene.spatial.util.GeoHashUtils;
import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.elasticsearch.common.io.stream.NamedWriteable;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoGridAggregatorBuilder.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoGridAggregatorBuilder.java
index 1931fd7ce9..e99887c6e0 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoGridAggregatorBuilder.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoGridAggregatorBuilder.java
@@ -21,7 +21,7 @@ package org.elasticsearch.search.aggregations.bucket.geogrid;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.SortedNumericDocValues;
-import org.apache.lucene.spatial.util.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -218,4 +218,4 @@ public class GeoGridAggregatorBuilder extends ValuesSourceAggregatorBuilder<Valu
}
}
-} \ No newline at end of file
+}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java
index a6ff6c8ad7..0d056e1efb 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java
@@ -18,7 +18,7 @@
*/
package org.elasticsearch.search.aggregations.bucket.geogrid;
-import org.apache.lucene.spatial.util.GeoHashUtils;
+import org.elasticsearch.common.geo.GeoHashUtils;
import org.apache.lucene.util.PriorityQueue;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.io.stream.StreamInput;
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java
index 472670d366..192ad6c28d 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java
@@ -92,7 +92,7 @@ public final class GeoCentroidAggregator extends MetricsAggregator {
pt[0] = pt[0] + (value.getLon() - pt[0]) / ++prevCounts;
pt[1] = pt[1] + (value.getLat() - pt[1]) / prevCounts;
}
- centroids.set(bucket, GeoEncodingUtils.mortonHash(pt[0], pt[1]));
+ centroids.set(bucket, GeoEncodingUtils.mortonHash(pt[1], pt[0]));
}
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java
index 36a04e7e08..77d357352a 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java
@@ -140,7 +140,7 @@ public class InternalGeoCentroid extends InternalMetricsAggregation implements G
out.writeVLong(count);
if (centroid != null) {
out.writeBoolean(true);
- out.writeLong(GeoEncodingUtils.mortonHash(centroid.lon(), centroid.lat()));
+ out.writeLong(GeoEncodingUtils.mortonHash(centroid.lat(), centroid.lon()));
} else {
out.writeBoolean(false);
}
diff --git a/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java b/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
index 393f798c85..83345be24b 100644
--- a/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
+++ b/core/src/main/java/org/elasticsearch/search/suggest/completion/context/GeoContextMapping.java
@@ -44,8 +44,8 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
-import static org.apache.lucene.spatial.util.GeoHashUtils.addNeighbors;
-import static org.apache.lucene.spatial.util.GeoHashUtils.stringEncode;
+import static org.elasticsearch.common.geo.GeoHashUtils.addNeighbors;
+import static org.elasticsearch.common.geo.GeoHashUtils.stringEncode;
/**
* A {@link ContextMapping} that uses a geo location/area as a