Skip to content

Commit a6c0007

Browse files
committed
Fix FuzzyQuery to properly handle Object, number, dates or String.
This makes FuzzyQueryBuilder and Parser take an Object as a value using the same logic as termQuery, so that numbers, dates or Strings would be properly handled. Relates #11865 Closes #12020
1 parent 786d034 commit a6c0007

File tree

12 files changed

+92
-46
lines changed

12 files changed

+92
-46
lines changed

core/src/main/java/org/elasticsearch/index/mapper/MappedFieldType.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,7 @@
2525
import org.apache.lucene.index.Term;
2626
import org.apache.lucene.index.Terms;
2727
import org.apache.lucene.queries.TermsQuery;
28-
import org.apache.lucene.search.ConstantScoreQuery;
29-
import org.apache.lucene.search.FuzzyQuery;
30-
import org.apache.lucene.search.MultiTermQuery;
31-
import org.apache.lucene.search.PrefixQuery;
32-
import org.apache.lucene.search.Query;
33-
import org.apache.lucene.search.RegexpQuery;
34-
import org.apache.lucene.search.TermQuery;
35-
import org.apache.lucene.search.TermRangeQuery;
28+
import org.apache.lucene.search.*;
3629
import org.apache.lucene.util.BytesRef;
3730
import org.elasticsearch.action.fieldstats.FieldStats;
3831
import org.elasticsearch.common.Nullable;
@@ -463,8 +456,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
463456
includeLower, includeUpper);
464457
}
465458

466-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
467-
return new FuzzyQuery(createTerm(value), fuzziness.asDistance(value), prefixLength, maxExpansions, transpositions);
459+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
460+
return new FuzzyQuery(createTerm(value), fuzziness.asDistance(BytesRefs.toString(value)), prefixLength, maxExpansions, transpositions);
468461
}
469462

470463
public Query prefixQuery(Object value, @Nullable MultiTermQuery.RewriteMethod method, @Nullable QueryParseContext context) {

core/src/main/java/org/elasticsearch/index/mapper/core/ByteFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
171171
}
172172

173173
@Override
174-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
175-
byte iValue = Byte.parseByte(value);
174+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
175+
byte iValue = parseValue(value);
176176
byte iSim = fuzziness.asByte();
177177
return NumericRangeQuery.newIntRange(names().indexName(), numericPrecisionStep(),
178178
iValue - iSim,

core/src/main/java/org/elasticsearch/index/mapper/core/DateFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
395395
}
396396

397397
@Override
398-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
399-
long iValue = dateMathParser().parse(value, now());
398+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
399+
long iValue = parseValue(value);
400400
long iSim;
401401
try {
402402
iSim = fuzziness.asTimeValue().millis();

core/src/main/java/org/elasticsearch/index/mapper/core/DoubleFieldMapper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.mapper.core;
2121

2222
import com.carrotsearch.hppc.DoubleArrayList;
23-
2423
import org.apache.lucene.analysis.Analyzer;
2524
import org.apache.lucene.analysis.TokenStream;
2625
import org.apache.lucene.document.Field;
@@ -178,8 +177,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
178177
}
179178

180179
@Override
181-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
182-
double iValue = Double.parseDouble(value);
180+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
181+
double iValue = parseDoubleValue(value);
183182
double iSim = fuzziness.asDouble();
184183
return NumericRangeQuery.newDoubleRange(names().indexName(), numericPrecisionStep(),
185184
iValue - iSim,

core/src/main/java/org/elasticsearch/index/mapper/core/FloatFieldMapper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.mapper.core;
2121

2222
import com.carrotsearch.hppc.FloatArrayList;
23-
2423
import org.apache.lucene.analysis.Analyzer;
2524
import org.apache.lucene.analysis.TokenStream;
2625
import org.apache.lucene.document.Field;
@@ -179,8 +178,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
179178
}
180179

181180
@Override
182-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
183-
float iValue = Float.parseFloat(value);
181+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
182+
float iValue = parseValue(value);
184183
final float iSim = fuzziness.asFloat();
185184
return NumericRangeQuery.newFloatRange(names().indexName(), numericPrecisionStep(),
186185
iValue - iSim,

core/src/main/java/org/elasticsearch/index/mapper/core/IntegerFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
180180
}
181181

182182
@Override
183-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
184-
int iValue = Integer.parseInt(value);
183+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
184+
int iValue = parseValue(value);
185185
int iSim = fuzziness.asInt();
186186
return NumericRangeQuery.newIntRange(names().indexName(), numericPrecisionStep(),
187187
iValue - iSim,

core/src/main/java/org/elasticsearch/index/mapper/core/LongFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
178178
}
179179

180180
@Override
181-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
182-
long iValue = Long.parseLong(value);
181+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
182+
long iValue = parseLongValue(value);
183183
final long iSim = fuzziness.asLong();
184184
return NumericRangeQuery.newLongRange(names().indexName(), numericPrecisionStep(),
185185
iValue - iSim,

core/src/main/java/org/elasticsearch/index/mapper/core/NumberFieldMapper.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.mapper.core;
2121

2222
import com.carrotsearch.hppc.LongArrayList;
23-
2423
import org.apache.lucene.analysis.Analyzer;
2524
import org.apache.lucene.analysis.NumericTokenStream;
2625
import org.apache.lucene.analysis.TokenStream;
@@ -42,13 +41,7 @@
4241
import org.elasticsearch.common.util.CollectionUtils;
4342
import org.elasticsearch.common.xcontent.XContentBuilder;
4443
import org.elasticsearch.index.analysis.NamedAnalyzer;
45-
import org.elasticsearch.index.mapper.FieldMapper;
46-
import org.elasticsearch.index.mapper.MappedFieldType;
47-
import org.elasticsearch.index.mapper.Mapper;
48-
import org.elasticsearch.index.mapper.MapperParsingException;
49-
import org.elasticsearch.index.mapper.MergeMappingException;
50-
import org.elasticsearch.index.mapper.MergeResult;
51-
import org.elasticsearch.index.mapper.ParseContext;
44+
import org.elasticsearch.index.mapper.*;
5245
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
5346

5447
import java.io.IOException;
@@ -158,7 +151,7 @@ public Object valueForSearch(Object value) {
158151
}
159152

160153
@Override
161-
public abstract Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions);
154+
public abstract Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions);
162155

163156
@Override
164157
public boolean useTermQueryWithQueryString() {

core/src/main/java/org/elasticsearch/index/mapper/core/ShortFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
176176
}
177177

178178
@Override
179-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
180-
short iValue = Short.parseShort(value);
179+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
180+
short iValue = parseValue(value);
181181
short iSim = fuzziness.asShort();
182182
return NumericRangeQuery.newIntRange(names().indexName(), numericPrecisionStep(),
183183
iValue - iSim,

core/src/main/java/org/elasticsearch/index/mapper/ip/IpFieldMapper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.mapper.ip;
2121

2222
import com.google.common.net.InetAddresses;
23-
2423
import org.apache.lucene.analysis.NumericTokenStream;
2524
import org.apache.lucene.document.Field;
2625
import org.apache.lucene.index.IndexOptions;
@@ -218,8 +217,8 @@ public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower
218217
}
219218

220219
@Override
221-
public Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
222-
long iValue = ipToLong(value);
220+
public Query fuzzyQuery(Object value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) {
221+
long iValue = parseValue(value);
223222
long iSim;
224223
try {
225224
iSim = ipToLong(fuzziness.asString());

0 commit comments

Comments
 (0)