diff options
author | Adrien Grand <jpountz@gmail.com> | 2016-06-08 15:40:46 +0200 |
---|---|---|
committer | Adrien Grand <jpountz@gmail.com> | 2016-06-10 16:18:12 +0200 |
commit | 44c653f5a87337a02daf4737bcb34150df509dbe (patch) | |
tree | 2b9c2fe3a5afb6d39d3a38beb9f2ecaa0b2b934f /core/src/main/java/org/elasticsearch/search/aggregations/metrics | |
parent | a25b8ee1bf2e70bc28f688731ef43962a3ef18ce (diff) |
Upgrade to lucene-6.1.0-snapshot-3a57bea.
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/aggregations/metrics')
2 files changed, 18 insertions, 11 deletions
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 192ad6c28d..ec838e7dd4 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 @@ -20,7 +20,7 @@ package org.elasticsearch.search.aggregations.metrics.geocentroid; import org.apache.lucene.index.LeafReaderContext; -import org.apache.lucene.spatial.util.GeoEncodingUtils; +import org.apache.lucene.spatial.geopoint.document.GeoPointField; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.lease.Releasables; import org.elasticsearch.common.util.BigArrays; @@ -82,9 +82,9 @@ public final class GeoCentroidAggregator extends MetricsAggregator { counts.increment(bucket, valueCount); // get the previous GeoPoint if a moving avg was computed if (prevCounts > 0) { - final GeoPoint centroid = GeoPoint.fromIndexLong(centroids.get(bucket)); - pt[0] = centroid.lon(); - pt[1] = centroid.lat(); + final long mortonCode = centroids.get(bucket); + pt[0] = GeoPointField.decodeLongitude(mortonCode); + pt[1] = GeoPointField.decodeLatitude(mortonCode); } // update the moving average for (int i = 0; i < valueCount; ++i) { @@ -92,7 +92,9 @@ 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[1], pt[0])); + // TODO: we do not need to interleave the lat and lon bits here + // should we just store them contiguously? + centroids.set(bucket, GeoPointField.encodeLatLon(pt[1], pt[0])); } } }; @@ -104,8 +106,10 @@ public final class GeoCentroidAggregator extends MetricsAggregator { return buildEmptyAggregation(); } final long bucketCount = counts.get(bucket); - final GeoPoint bucketCentroid = (bucketCount > 0) ? GeoPoint.fromIndexLong(centroids.get(bucket)) : - new GeoPoint(Double.NaN, Double.NaN); + final long mortonCode = centroids.get(bucket); + final GeoPoint bucketCentroid = (bucketCount > 0) + ? new GeoPoint(GeoPointField.decodeLatitude(mortonCode), GeoPointField.decodeLongitude(mortonCode)) + : null; return new InternalGeoCentroid(name, bucketCentroid , bucketCount, pipelineAggregators(), metaData()); } 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 2798169b69..2bb3056ca6 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 @@ -19,7 +19,7 @@ package org.elasticsearch.search.aggregations.metrics.geocentroid; -import org.apache.lucene.spatial.util.GeoEncodingUtils; +import org.apache.lucene.spatial.geopoint.document.GeoPointField; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -61,6 +61,7 @@ public class InternalGeoCentroid extends InternalMetricsAggregation implements G public InternalGeoCentroid(String name, GeoPoint centroid, long count, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) { super(name, pipelineAggregators, metaData); + assert (centroid == null) == (count == 0); this.centroid = centroid; assert count >= 0; this.count = count; @@ -68,7 +69,7 @@ public class InternalGeoCentroid extends InternalMetricsAggregation implements G @Override public GeoPoint centroid() { - return (centroid == null || Double.isNaN(centroid.lon()) ? null : centroid); + return centroid; } @Override @@ -128,7 +129,8 @@ public class InternalGeoCentroid extends InternalMetricsAggregation implements G protected void doReadFrom(StreamInput in) throws IOException { count = in.readVLong(); if (in.readBoolean()) { - centroid = GeoPoint.fromIndexLong(in.readLong()); + final long hash = in.readLong(); + centroid = new GeoPoint(GeoPointField.decodeLatitude(hash), GeoPointField.decodeLongitude(hash)); } else { centroid = null; } @@ -139,7 +141,8 @@ public class InternalGeoCentroid extends InternalMetricsAggregation implements G out.writeVLong(count); if (centroid != null) { out.writeBoolean(true); - out.writeLong(GeoEncodingUtils.mortonHash(centroid.lat(), centroid.lon())); + // should we just write lat and lon separately? + out.writeLong(GeoPointField.encodeLatLon(centroid.lat(), centroid.lon())); } else { out.writeBoolean(false); } |