Skip to content

Commit 1b03d09

Browse files
authored
[9.0] Applying Apache Lucene fix: apache/lucene#14732 (elastic#128671) (elastic#128763)
* Applying Apache Lucene fix: apache/lucene#14732 (elastic#128671) * Applying Apache Lucene fix: apache/lucene#14732 * fixing test * fixing annot (cherry picked from commit 2a44166) * adding forbidden APIs check
1 parent 8faa4c3 commit 1b03d09

File tree

15 files changed

+793
-22
lines changed

15 files changed

+793
-22
lines changed

build-tools-internal/src/main/resources/forbidden/es-all-signatures.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,11 @@ org.apache.logging.log4j.message.ParameterizedMessage#<init>(java.lang.String, j
6161

6262
@defaultMessage Use WriteLoadForecaster#getForecastedWriteLoad instead
6363
org.elasticsearch.cluster.metadata.IndexMetadata#getForecastedWriteLoad()
64+
65+
# This is a temporary patch as there is a low level Lucene bug in certain scenarios
66+
# this should be fixed in the new Lucene release 10.3+
67+
org.apache.lucene.document.LongField#newExactQuery(java.lang.String, long) @ Use org.elasticsearch.lucene.document.NumericField#newExactLongQuery(java.lang.String, long) instead.
68+
org.apache.lucene.document.LongField#newRangeQuery(java.lang.String, long, long) @ Use org.elasticsearch.lucene.document.NumericField#newRangeLongQuery(java.lang.String, long, long) instead.
69+
org.apache.lucene.document.IntField#newExactQuery(java.lang.String, int) @ Use org.elasticsearch.lucene.document.NumericField#newExactIntQuery(java.lang.String, int) instead.
70+
org.apache.lucene.document.IntField#newRangeQuery(java.lang.String, int, int) @ Use org.elasticsearch.lucene.document.NumericField#newRangeIntQuery(java.lang.String, int, int) instead.
71+
org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery @ use org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery instead.

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.elasticsearch.index.mapper.MappedFieldType;
3131
import org.elasticsearch.index.mapper.MapperBuilderContext;
3232
import org.elasticsearch.index.mapper.NumberFieldMapper;
33+
import org.elasticsearch.lucene.document.NumericField;
3334

3435
import java.io.IOException;
3536
import java.util.Arrays;
@@ -47,7 +48,7 @@ public void testTermQuery() {
4748
);
4849
double value = (randomDouble() * 2 - 1) * 10000;
4950
long scaledValue = Math.round(value * ft.getScalingFactor());
50-
assertEquals(LongPoint.newExactQuery("scaled_float", scaledValue), ft.termQuery(value, MOCK_CONTEXT));
51+
assertEquals(NumericField.newExactLongQuery("scaled_float", scaledValue), ft.termQuery(value, MOCK_CONTEXT));
5152

5253
MappedFieldType ft2 = new ScaledFloatFieldMapper.ScaledFloatFieldType("scaled_float", 0.1 + randomDouble() * 100, false);
5354
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
@@ -475,4 +475,5 @@
475475
exports org.elasticsearch.monitor.metrics;
476476
exports org.elasticsearch.plugins.internal.rewriter to org.elasticsearch.inference;
477477
exports org.elasticsearch.lucene.util.automaton;
478+
exports org.elasticsearch.lucene.search;
478479
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.apache.lucene.index.PointValues;
2222
import org.apache.lucene.index.SortedNumericDocValues;
2323
import org.apache.lucene.search.IndexOrDocValuesQuery;
24-
import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
2524
import org.apache.lucene.search.Query;
2625
import org.elasticsearch.ElasticsearchParseException;
2726
import org.elasticsearch.common.geo.ShapeRelation;
@@ -46,6 +45,7 @@
4645
import org.elasticsearch.index.query.DateRangeIncludingNowQuery;
4746
import org.elasticsearch.index.query.QueryRewriteContext;
4847
import org.elasticsearch.index.query.SearchExecutionContext;
48+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
4949
import org.elasticsearch.script.DateFieldScript;
5050
import org.elasticsearch.script.Script;
5151
import org.elasticsearch.script.ScriptCompiler;
@@ -627,7 +627,7 @@ public Query rangeQuery(
627627
query = SortedNumericDocValuesField.newSlowRangeQuery(name(), l, u);
628628
}
629629
if (hasDocValues() && context.indexSortedOnField(name())) {
630-
query = new IndexSortSortedNumericDocValuesRangeQuery(name(), l, u, query);
630+
query = new XIndexSortSortedNumericDocValuesRangeQuery(name(), l, u, query);
631631
}
632632
return query;
633633
});

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

Lines changed: 5 additions & 4 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;
@@ -46,6 +45,8 @@
4645
import org.elasticsearch.index.fielddata.plain.SortedNumericIndexFieldData;
4746
import org.elasticsearch.index.mapper.TimeSeriesParams.MetricType;
4847
import org.elasticsearch.index.query.SearchExecutionContext;
48+
import org.elasticsearch.lucene.document.NumericField;
49+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
4950
import org.elasticsearch.script.DoubleFieldScript;
5051
import org.elasticsearch.script.LongFieldScript;
5152
import org.elasticsearch.script.Script;
@@ -1149,7 +1150,7 @@ public Query rangeQuery(
11491150
query = SortedNumericDocValuesField.newSlowRangeQuery(field, l, u);
11501151
}
11511152
if (hasDocValues && context.indexSortedOnField(field)) {
1152-
query = new IndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
1153+
query = new XIndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
11531154
}
11541155
return query;
11551156
}
@@ -1246,7 +1247,7 @@ public Query termQuery(String field, Object value, boolean isIndexed) {
12461247

12471248
long v = parse(value, true);
12481249
if (isIndexed) {
1249-
return LongPoint.newExactQuery(field, v);
1250+
return NumericField.newExactLongQuery(field, v);
12501251
} else {
12511252
return SortedNumericDocValuesField.newSlowExactQuery(field, v);
12521253
}
@@ -1295,7 +1296,7 @@ public Query rangeQuery(
12951296
query = SortedNumericDocValuesField.newSlowRangeQuery(field, l, u);
12961297
}
12971298
if (hasDocValues && context.indexSortedOnField(field)) {
1298-
query = new IndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
1299+
query = new XIndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
12991300
}
13001301
return query;
13011302
});
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)