From 001a6b0ff7a9f2185617cc3dd9dfe76e1cc04162 Mon Sep 17 00:00:00 2001 From: Shay Banon Date: Thu, 11 Aug 2011 23:37:18 +0300 Subject: [PATCH] Failure to reduce geo distance sorting (class case exception), closes #1234. --- .../sort/DoubleFieldsFunctionDataComparator.java | 11 ++++++++--- .../sort/StringFieldsFunctionDataComparator.java | 11 ++++++++--- .../index/search/geo/GeoDistanceDataComparator.java | 13 +++++++++---- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/DoubleFieldsFunctionDataComparator.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/DoubleFieldsFunctionDataComparator.java index 918142e8b6f01..62ae7466c8972 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/DoubleFieldsFunctionDataComparator.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/DoubleFieldsFunctionDataComparator.java @@ -21,8 +21,9 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.FieldComparator; -import org.apache.lucene.search.FieldComparatorSource; import org.apache.lucene.search.Scorer; +import org.apache.lucene.search.SortField; +import org.elasticsearch.index.field.data.FieldDataType; import org.elasticsearch.script.SearchScript; import java.io.IOException; @@ -33,11 +34,11 @@ // LUCENE MONITOR: Monitor against FieldComparator.Double public class DoubleFieldsFunctionDataComparator extends FieldComparator { - public static FieldComparatorSource comparatorSource(SearchScript script) { + public static FieldDataType.ExtendedFieldComparatorSource comparatorSource(SearchScript script) { return new InnerSource(script); } - private static class InnerSource extends FieldComparatorSource { + private static class InnerSource extends FieldDataType.ExtendedFieldComparatorSource { private final SearchScript script; @@ -48,6 +49,10 @@ private InnerSource(SearchScript script) { @Override public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException { return new DoubleFieldsFunctionDataComparator(numHits, script); } + + @Override public int reducedType() { + return SortField.DOUBLE; + } } private final SearchScript script; diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/StringFieldsFunctionDataComparator.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/StringFieldsFunctionDataComparator.java index b9afad072a360..a433aca01122d 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/StringFieldsFunctionDataComparator.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/field/function/sort/StringFieldsFunctionDataComparator.java @@ -21,8 +21,9 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.FieldComparator; -import org.apache.lucene.search.FieldComparatorSource; import org.apache.lucene.search.Scorer; +import org.apache.lucene.search.SortField; +import org.elasticsearch.index.field.data.FieldDataType; import org.elasticsearch.script.SearchScript; import java.io.IOException; @@ -32,11 +33,11 @@ */ public class StringFieldsFunctionDataComparator extends FieldComparator { - public static FieldComparatorSource comparatorSource(SearchScript script) { + public static FieldDataType.ExtendedFieldComparatorSource comparatorSource(SearchScript script) { return new InnerSource(script); } - private static class InnerSource extends FieldComparatorSource { + private static class InnerSource extends FieldDataType.ExtendedFieldComparatorSource { private final SearchScript script; @@ -47,6 +48,10 @@ private InnerSource(SearchScript script) { @Override public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException { return new StringFieldsFunctionDataComparator(numHits, script); } + + @Override public int reducedType() { + return SortField.STRING; + } } private final SearchScript script; diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceDataComparator.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceDataComparator.java index cb4c67f2c07c8..4cefd6335c86a 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceDataComparator.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/search/geo/GeoDistanceDataComparator.java @@ -21,10 +21,11 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.FieldComparator; -import org.apache.lucene.search.FieldComparatorSource; +import org.apache.lucene.search.SortField; import org.elasticsearch.ElasticSearchIllegalArgumentException; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.index.cache.field.data.FieldDataCache; +import org.elasticsearch.index.field.data.FieldDataType; import org.elasticsearch.index.mapper.FieldMapper; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.geo.GeoPointFieldData; @@ -38,12 +39,12 @@ // LUCENE MONITOR: Monitor against FieldComparator.Double public class GeoDistanceDataComparator extends FieldComparator { - public static FieldComparatorSource comparatorSource(String fieldName, double lat, double lon, DistanceUnit unit, GeoDistance geoDistance, - FieldDataCache fieldDataCache, MapperService mapperService) { + public static FieldDataType.ExtendedFieldComparatorSource comparatorSource(String fieldName, double lat, double lon, DistanceUnit unit, GeoDistance geoDistance, + FieldDataCache fieldDataCache, MapperService mapperService) { return new InnerSource(fieldName, lat, lon, unit, geoDistance, fieldDataCache, mapperService); } - private static class InnerSource extends FieldComparatorSource { + static class InnerSource extends FieldDataType.ExtendedFieldComparatorSource { protected final String fieldName; @@ -73,6 +74,10 @@ private InnerSource(String fieldName, double lat, double lon, DistanceUnit unit, @Override public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException { return new GeoDistanceDataComparator(numHits, fieldname, lat, lon, unit, geoDistance, fieldDataCache, mapperService); } + + @Override public int reducedType() { + return SortField.DOUBLE; + } } protected final String fieldName;