summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java')
-rw-r--r--core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java63
1 files changed, 31 insertions, 32 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java b/core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java
index d11a79c255..93fa5bf22a 100644
--- a/core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java
+++ b/core/src/main/java/org/elasticsearch/index/fielddata/plain/LatLonPointDVAtomicFieldData.java
@@ -19,6 +19,8 @@
package org.elasticsearch.index.fielddata.plain;
import org.apache.lucene.geo.GeoEncodingUtils;
+import org.apache.lucene.index.DocValues;
+import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.ArrayUtil;
@@ -26,16 +28,18 @@ import org.apache.lucene.util.RamUsageEstimator;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.fielddata.MultiGeoPointValues;
-import java.util.Arrays;
+import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
final class LatLonPointDVAtomicFieldData extends AbstractAtomicGeoPointFieldData {
- private final SortedNumericDocValues values;
+ private final LeafReader reader;
+ private final String fieldName;
- LatLonPointDVAtomicFieldData(SortedNumericDocValues values) {
+ LatLonPointDVAtomicFieldData(LeafReader reader, String fieldName) {
super();
- this.values = values;
+ this.reader = reader;
+ this.fieldName = fieldName;
}
@Override
@@ -55,37 +59,32 @@ final class LatLonPointDVAtomicFieldData extends AbstractAtomicGeoPointFieldData
@Override
public MultiGeoPointValues getGeoPointValues() {
- return new MultiGeoPointValues() {
- GeoPoint[] points = new GeoPoint[0];
- private int count = 0;
+ try {
+ final SortedNumericDocValues numericValues = DocValues.getSortedNumeric(reader, fieldName);
+ return new MultiGeoPointValues() {
- @Override
- public void setDocument(int docId) {
- values.setDocument(docId);
- count = values.count();
- if (count > points.length) {
- final int previousLength = points.length;
- points = Arrays.copyOf(points, ArrayUtil.oversize(count, RamUsageEstimator.NUM_BYTES_OBJECT_REF));
- for (int i = previousLength; i < points.length; ++i) {
- points[i] = new GeoPoint(Double.NaN, Double.NaN);
- }
- }
- long encoded;
- for (int i=0; i<count; ++i) {
- encoded = values.valueAt(i);
- points[i].reset(GeoEncodingUtils.decodeLatitude((int)(encoded >>> 32)), GeoEncodingUtils.decodeLongitude((int)encoded));
+ final GeoPoint point = new GeoPoint();
+
+ @Override
+ public boolean advanceExact(int doc) throws IOException {
+ return numericValues.advanceExact(doc);
}
- }
- @Override
- public int count() {
- return count;
- }
+ @Override
+ public int docValueCount() {
+ return numericValues.docValueCount();
+ }
- @Override
- public GeoPoint valueAt(int index) {
- return points[index];
- }
- };
+ @Override
+ public GeoPoint nextValue() throws IOException {
+ final long encoded = numericValues.nextValue();
+ point.reset(GeoEncodingUtils.decodeLatitude((int) (encoded >>> 32)),
+ GeoEncodingUtils.decodeLongitude((int) encoded));
+ return point;
+ }
+ };
+ } catch (IOException e) {
+ throw new IllegalStateException("Cannot load doc values", e);
+ }
}
}