Skip to content

Commit 9a10ccf

Browse files
committed
Applying Apache Lucene fix: apache/lucene#14732
1 parent 77595cb commit 9a10ccf

File tree

15 files changed

+787
-35
lines changed

15 files changed

+787
-35
lines changed

benchmarks/src/main/java/org/elasticsearch/benchmark/search/query/range/DateFieldMapperDocValuesSkipperBenchmark.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
import org.apache.lucene.index.IndexWriterConfig;
2222
import org.apache.lucene.search.IndexOrDocValuesQuery;
2323
import org.apache.lucene.search.IndexSearcher;
24-
import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
2524
import org.apache.lucene.search.Query;
2625
import org.apache.lucene.search.Sort;
2726
import org.apache.lucene.search.SortField;
2827
import org.apache.lucene.search.SortedNumericSortField;
2928
import org.apache.lucene.store.Directory;
3029
import org.apache.lucene.store.FSDirectory;
3130
import org.apache.lucene.util.BytesRef;
31+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
3232
import org.openjdk.jmh.annotations.Benchmark;
3333
import org.openjdk.jmh.annotations.BenchmarkMode;
3434
import org.openjdk.jmh.annotations.Fork;
@@ -295,7 +295,7 @@ public void rangeQueryWithDocValuesSkipper(final Blackhole bh) throws IOExceptio
295295
/**
296296
* Runs the actual Lucene range query, optionally combining a {@link LongPoint} index query
297297
* with doc values ({@link SortedNumericDocValuesField}) via {@link IndexOrDocValuesQuery},
298-
* and then wrapping it with an {@link IndexSortSortedNumericDocValuesRangeQuery} to utilize the index sort.
298+
* and then wrapping it with an {@link XIndexSortSortedNumericDocValuesRangeQuery} to utilize the index sort.
299299
*
300300
* @param searcher the Lucene {@link IndexSearcher}
301301
* @param rangeStartTimestamp lower bound of the timestamp range
@@ -316,7 +316,7 @@ private long rangeQuery(final IndexSearcher searcher, long rangeStartTimestamp,
316316
)
317317
: SortedNumericDocValuesField.newSlowRangeQuery(TIMESTAMP_FIELD, rangeStartTimestamp, rangeEndTimestamp);
318318

319-
final Query query = new IndexSortSortedNumericDocValuesRangeQuery(
319+
final Query query = new XIndexSortSortedNumericDocValuesRangeQuery(
320320
TIMESTAMP_FIELD,
321321
rangeStartTimestamp,
322322
rangeEndTimestamp,

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldTypeTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import org.apache.lucene.document.Document;
1313
import org.apache.lucene.document.DoublePoint;
14-
import org.apache.lucene.document.LongField;
1514
import org.apache.lucene.document.LongPoint;
1615
import org.apache.lucene.document.SortedNumericDocValuesField;
1716
import org.apache.lucene.index.DirectoryReader;
@@ -31,6 +30,7 @@
3130
import org.elasticsearch.index.mapper.MappedFieldType;
3231
import org.elasticsearch.index.mapper.MapperBuilderContext;
3332
import org.elasticsearch.index.mapper.NumberFieldMapper;
33+
import org.elasticsearch.lucene.document.NumericField;
3434

3535
import java.io.IOException;
3636
import java.util.Arrays;
@@ -48,7 +48,7 @@ public void testTermQuery() {
4848
);
4949
double value = (randomDouble() * 2 - 1) * 10000;
5050
long scaledValue = Math.round(value * ft.getScalingFactor());
51-
assertEquals(LongField.newExactQuery("scaled_float", scaledValue), ft.termQuery(value, MOCK_CONTEXT));
51+
assertEquals(NumericField.newExactLongQuery("scaled_float", scaledValue), ft.termQuery(value, MOCK_CONTEXT));
5252

5353
MappedFieldType ft2 = new ScaledFloatFieldMapper.ScaledFloatFieldType("scaled_float", 0.1 + randomDouble() * 100, false);
5454
ElasticsearchException e2 = expectThrows(ElasticsearchException.class, () -> ft2.termQuery("42", MOCK_CONTEXT_DISALLOW_EXPENSIVE));

server/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,4 +477,5 @@
477477
exports org.elasticsearch.plugins.internal.rewriter to org.elasticsearch.inference;
478478
exports org.elasticsearch.lucene.util.automaton;
479479
exports org.elasticsearch.index.codec.perfield;
480+
exports org.elasticsearch.lucene.search;
480481
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.lucene.index.PointValues;
2323
import org.apache.lucene.index.SortedNumericDocValues;
2424
import org.apache.lucene.search.IndexOrDocValuesQuery;
25-
import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
2625
import org.apache.lucene.search.Query;
2726
import org.elasticsearch.ElasticsearchParseException;
2827
import org.elasticsearch.common.geo.ShapeRelation;
@@ -50,6 +49,7 @@
5049
import org.elasticsearch.index.query.DateRangeIncludingNowQuery;
5150
import org.elasticsearch.index.query.QueryRewriteContext;
5251
import org.elasticsearch.index.query.SearchExecutionContext;
52+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
5353
import org.elasticsearch.script.DateFieldScript;
5454
import org.elasticsearch.script.Script;
5555
import org.elasticsearch.script.ScriptCompiler;
@@ -750,7 +750,7 @@ public Query rangeQuery(
750750
query = SortedNumericDocValuesField.newSlowRangeQuery(name(), l, u);
751751
}
752752
if (hasDocValues() && context.indexSortedOnField(name())) {
753-
query = new IndexSortSortedNumericDocValuesRangeQuery(name(), l, u, query);
753+
query = new XIndexSortSortedNumericDocValuesRangeQuery(name(), l, u, query);
754754
}
755755
return query;
756756
});

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.lucene.index.LeafReaderContext;
2525
import org.apache.lucene.sandbox.document.HalfFloatPoint;
2626
import org.apache.lucene.search.IndexOrDocValuesQuery;
27-
import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
2827
import org.apache.lucene.search.MatchNoDocsQuery;
2928
import org.apache.lucene.search.Query;
3029
import org.apache.lucene.util.BytesRef;
@@ -47,6 +46,8 @@
4746
import org.elasticsearch.index.fielddata.plain.SortedNumericIndexFieldData;
4847
import org.elasticsearch.index.mapper.TimeSeriesParams.MetricType;
4948
import org.elasticsearch.index.query.SearchExecutionContext;
49+
import org.elasticsearch.lucene.document.NumericField;
50+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
5051
import org.elasticsearch.script.DoubleFieldScript;
5152
import org.elasticsearch.script.LongFieldScript;
5253
import org.elasticsearch.script.Script;
@@ -1146,7 +1147,7 @@ public Query termQuery(String field, Object value, boolean isIndexed, boolean ha
11461147
int v = parse(value, true);
11471148

11481149
if (isIndexed && hasDocValues) {
1149-
return IntField.newExactQuery(field, v);
1150+
return NumericField.newExactIntQuery(field, v);
11501151
} else if (isIndexed) {
11511152
return IntPoint.newExactQuery(field, v);
11521153
} else {
@@ -1223,7 +1224,7 @@ public Query rangeQuery(
12231224
query = SortedNumericDocValuesField.newSlowRangeQuery(field, l, u);
12241225
}
12251226
if (hasDocValues && context.indexSortedOnField(field)) {
1226-
query = new IndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
1227+
query = new XIndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
12271228
}
12281229
return query;
12291230
}
@@ -1330,7 +1331,7 @@ public Query termQuery(String field, Object value, boolean isIndexed, boolean ha
13301331

13311332
long v = parse(value, true);
13321333
if (isIndexed && hasDocValues) {
1333-
return LongField.newExactQuery(field, v);
1334+
return NumericField.newExactLongQuery(field, v);
13341335
} else if (isIndexed) {
13351336
return LongPoint.newExactQuery(field, v);
13361337
} else {
@@ -1381,7 +1382,7 @@ public Query rangeQuery(
13811382
query = SortedNumericDocValuesField.newSlowRangeQuery(field, l, u);
13821383
}
13831384
if (hasDocValues && context.indexSortedOnField(field)) {
1384-
query = new IndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
1385+
query = new XIndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
13851386
}
13861387
return query;
13871388
});
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.lucene.document;
11+
12+
import org.apache.lucene.document.IntPoint;
13+
import org.apache.lucene.document.LongPoint;
14+
import org.apache.lucene.document.SortedNumericDocValuesField;
15+
import org.apache.lucene.search.IndexOrDocValuesQuery;
16+
import org.apache.lucene.search.PointRangeQuery;
17+
import org.apache.lucene.search.Query;
18+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
19+
20+
public final class NumericField {
21+
22+
private NumericField() {
23+
// Utility class, no instantiation
24+
}
25+
26+
public static Query newExactLongQuery(String field, long value) {
27+
return newRangeLongQuery(field, value, value);
28+
}
29+
30+
public static Query newRangeLongQuery(String field, long lowerValue, long upperValue) {
31+
PointRangeQuery.checkArgs(field, lowerValue, upperValue);
32+
Query fallbackQuery = new IndexOrDocValuesQuery(
33+
LongPoint.newRangeQuery(field, lowerValue, upperValue),
34+
SortedNumericDocValuesField.newSlowRangeQuery(field, lowerValue, upperValue)
35+
);
36+
return new XIndexSortSortedNumericDocValuesRangeQuery(field, lowerValue, upperValue, fallbackQuery);
37+
}
38+
39+
public static Query newExactIntQuery(String field, int value) {
40+
return newRangeIntQuery(field, value, value);
41+
}
42+
43+
public static Query newRangeIntQuery(String field, int lowerValue, int upperValue) {
44+
PointRangeQuery.checkArgs(field, lowerValue, upperValue);
45+
Query fallbackQuery = new IndexOrDocValuesQuery(
46+
IntPoint.newRangeQuery(field, lowerValue, upperValue),
47+
SortedNumericDocValuesField.newSlowRangeQuery(field, lowerValue, upperValue)
48+
);
49+
return new XIndexSortSortedNumericDocValuesRangeQuery(field, lowerValue, upperValue, fallbackQuery);
50+
}
51+
52+
}

0 commit comments

Comments
 (0)