mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-25 14:26:27 +00:00
Support date and ip types for numeric_range
filter, closes #530.
This commit is contained in:
parent
b4113d57d3
commit
db1f7e09f3
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
@ -3,6 +3,9 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
|
||||
</component>
|
||||
<component name="EntryPointsManager">
|
||||
<entry_points version="2.0" />
|
||||
</component>
|
||||
<component name="IdProvider" IDEtalkID="4A8F53B851E388D477AEE98A9276B454" />
|
||||
<component name="JavadocGenerationManager">
|
||||
<option name="OUTPUT_DIRECTORY" value="$USER_HOME$/tmp/tmp1" />
|
||||
|
@ -31,8 +31,10 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericFloatAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -127,6 +129,13 @@ public class BoostFieldMapper extends NumberFieldMapper<Float> implements org.el
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newFloatRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : Float.parseFloat(lowerTerm),
|
||||
upperTerm == null ? null : Float.parseFloat(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public void parse(ParseContext context) throws IOException {
|
||||
// we override parse since we want to handle cases where it is not indexed and not stored (the default)
|
||||
float value = parseFloatValue(context);
|
||||
|
@ -34,9 +34,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericDateAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -167,6 +169,13 @@ public class DateFieldMapper extends NumberFieldMapper<Long> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newLongRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : parseStringValue(lowerTerm),
|
||||
upperTerm == null ? null : parseStringValue(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
String dateAsString;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -31,9 +31,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericDoubleAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -140,6 +142,13 @@ public class DoubleFieldMapper extends NumberFieldMapper<Double> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newDoubleRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : Double.parseDouble(lowerTerm),
|
||||
upperTerm == null ? null : Double.parseDouble(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
double value;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -32,9 +32,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericFloatAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -139,6 +141,13 @@ public class FloatFieldMapper extends NumberFieldMapper<Float> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newFloatRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : Float.parseFloat(lowerTerm),
|
||||
upperTerm == null ? null : Float.parseFloat(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
float value;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -32,9 +32,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericIntegerAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -139,6 +141,13 @@ public class IntegerFieldMapper extends NumberFieldMapper<Integer> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newIntRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : Integer.parseInt(lowerTerm),
|
||||
upperTerm == null ? null : Integer.parseInt(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
int value;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -32,9 +32,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericLongAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -139,6 +141,13 @@ public class LongFieldMapper extends NumberFieldMapper<Long> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newLongRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : Long.parseLong(lowerTerm),
|
||||
upperTerm == null ? null : Long.parseLong(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
long value;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -29,6 +29,7 @@ import org.apache.lucene.util.NumericUtils;
|
||||
import org.elasticsearch.common.thread.ThreadLocals;
|
||||
import org.elasticsearch.common.trove.TIntObjectHashMap;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
|
||||
@ -142,6 +143,11 @@ public abstract class NumberFieldMapper<T extends Number> extends AbstractFieldM
|
||||
|
||||
@Override public abstract Filter rangeFilter(String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper);
|
||||
|
||||
/**
|
||||
* A range filter based on the field data cache.
|
||||
*/
|
||||
public abstract Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper);
|
||||
|
||||
/**
|
||||
* Override the default behavior (to return the string, and return the actual Number instance).
|
||||
*/
|
||||
|
@ -32,9 +32,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericIntegerAnalyzer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -139,6 +141,13 @@ public class ShortFieldMapper extends NumberFieldMapper<Short> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newShortRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : Short.parseShort(lowerTerm),
|
||||
upperTerm == null ? null : Short.parseShort(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
short value;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -35,6 +35,7 @@ import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.analysis.NamedAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericAnalyzer;
|
||||
import org.elasticsearch.index.analysis.NumericTokenizer;
|
||||
import org.elasticsearch.index.cache.field.data.FieldDataCache;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.MapperParsingException;
|
||||
import org.elasticsearch.index.mapper.MergeMappingException;
|
||||
@ -42,6 +43,7 @@ import org.elasticsearch.index.mapper.xcontent.MergeContext;
|
||||
import org.elasticsearch.index.mapper.xcontent.NumberFieldMapper;
|
||||
import org.elasticsearch.index.mapper.xcontent.ParseContext;
|
||||
import org.elasticsearch.index.mapper.xcontent.XContentMapper;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
@ -186,6 +188,13 @@ public class IpFieldMapper extends NumberFieldMapper<Long> {
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override public Filter rangeFilter(FieldDataCache fieldDataCache, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper) {
|
||||
return NumericRangeFieldDataFilter.newLongRange(fieldDataCache, names.indexName(),
|
||||
lowerTerm == null ? null : ipToLong(lowerTerm),
|
||||
upperTerm == null ? null : ipToLong(upperTerm),
|
||||
includeLower, includeUpper);
|
||||
}
|
||||
|
||||
@Override protected Field parseCreateField(ParseContext context) throws IOException {
|
||||
String ipAsString;
|
||||
if (context.externalValueSet()) {
|
||||
|
@ -25,11 +25,10 @@ import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.field.data.FieldDataType;
|
||||
import org.elasticsearch.index.mapper.FieldMapper;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.mapper.xcontent.NumberFieldMapper;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.search.NumericRangeFieldDataFilter;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -105,7 +104,6 @@ public class NumericRangeFilterParser extends AbstractIndexComponent implements
|
||||
}
|
||||
}
|
||||
|
||||
Filter filter;
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||
|
||||
if (smartNameFieldMappers == null || !smartNameFieldMappers.hasMapper()) {
|
||||
@ -113,29 +111,10 @@ public class NumericRangeFilterParser extends AbstractIndexComponent implements
|
||||
}
|
||||
|
||||
FieldMapper mapper = smartNameFieldMappers.mapper();
|
||||
if (mapper.fieldDataType() == FieldDataType.DefaultTypes.INT) {
|
||||
filter = NumericRangeFieldDataFilter.newIntRange(parseContext.indexCache().fieldData(), mapper.names().indexName(),
|
||||
from == null ? null : Integer.parseInt(from),
|
||||
to == null ? null : Integer.parseInt(to),
|
||||
includeLower, includeUpper);
|
||||
} else if (mapper.fieldDataType() == FieldDataType.DefaultTypes.LONG) {
|
||||
filter = NumericRangeFieldDataFilter.newLongRange(parseContext.indexCache().fieldData(), mapper.names().indexName(),
|
||||
from == null ? null : Long.parseLong(from),
|
||||
to == null ? null : Long.parseLong(to),
|
||||
includeLower, includeUpper);
|
||||
} else if (mapper.fieldDataType() == FieldDataType.DefaultTypes.FLOAT) {
|
||||
filter = NumericRangeFieldDataFilter.newFloatRange(parseContext.indexCache().fieldData(), mapper.names().indexName(),
|
||||
from == null ? null : Float.parseFloat(from),
|
||||
to == null ? null : Float.parseFloat(to),
|
||||
includeLower, includeUpper);
|
||||
} else if (mapper.fieldDataType() == FieldDataType.DefaultTypes.DOUBLE) {
|
||||
filter = NumericRangeFieldDataFilter.newDoubleRange(parseContext.indexCache().fieldData(), mapper.names().indexName(),
|
||||
from == null ? null : Double.parseDouble(from),
|
||||
to == null ? null : Double.parseDouble(to),
|
||||
includeLower, includeUpper);
|
||||
} else {
|
||||
throw new QueryParsingException(index, "field [" + fieldName + "] is not numeric");
|
||||
if (!(mapper instanceof NumberFieldMapper)) {
|
||||
throw new QueryParsingException(index, "Field [" + fieldName + "] is not a numeric type");
|
||||
}
|
||||
Filter filter = ((NumberFieldMapper) mapper).rangeFilter(parseContext.indexCache().fieldData(), from, to, includeLower, includeUpper);
|
||||
|
||||
if (cache) {
|
||||
filter = parseContext.cacheFilter(filter);
|
||||
|
Loading…
x
Reference in New Issue
Block a user