diff --git a/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java index fd8b33b5fed..63304b68db5 100644 --- a/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java +++ b/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java @@ -126,6 +126,27 @@ public abstract class NumberFieldMapper extends AbstractFieldM } }; + private static ThreadLocal tokenStream4 = new ThreadLocal() { + @Override + protected NumericTokenStream initialValue() { + return new NumericTokenStream(4); + } + }; + + private static ThreadLocal tokenStream8 = new ThreadLocal() { + @Override + protected NumericTokenStream initialValue() { + return new NumericTokenStream(8); + } + }; + + private static ThreadLocal tokenStreamMax = new ThreadLocal() { + @Override + protected NumericTokenStream initialValue() { + return new NumericTokenStream(Integer.MAX_VALUE); + } + }; + protected NumberFieldMapper(Names names, int precisionStep, float boost, FieldType fieldType, Explicit ignoreMalformed, NamedAnalyzer indexAnalyzer, NamedAnalyzer searchAnalyzer, PostingsFormatProvider provider, SimilarityProvider similarity, @@ -248,10 +269,18 @@ public abstract class NumberFieldMapper extends AbstractFieldM @Override public void close() { - tokenStream.remove(); } protected NumericTokenStream popCachedStream() { + if (precisionStep == 4) { + return tokenStream4.get(); + } + if (precisionStep == 8) { + return tokenStream8.get(); + } + if (precisionStep == Integer.MAX_VALUE) { + return tokenStreamMax.get(); + } return tokenStream.get(); } @@ -288,7 +317,7 @@ public abstract class NumberFieldMapper extends AbstractFieldM builder.field("ignore_malformed", ignoreMalformed.value()); } } - + @Override public boolean isNumeric() { return true;