Skip to content

Commit 86b2daa

Browse files
benwtrentelasticsearchmachine
andauthored
[8.19] Applying Apache Lucene fix: apache/lucene#14732 (elastic#128671) (elastic#128764)
* 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) * [CI] Auto commit changes from spotless * adding forbidden api check --------- Co-authored-by: elasticsearchmachine <[email protected]>
1 parent 66ddbd7 commit 86b2daa

File tree

15 files changed

+770
-32
lines changed

15 files changed

+770
-32
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,10 @@ 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+
org.apache.lucene.document.LongField#newExactQuery(java.lang.String, long) @ Use org.elasticsearch.lucene.document.NumericField#newExactLongQuery(java.lang.String, long) instead.
67+
org.apache.lucene.document.LongField#newRangeQuery(java.lang.String, long, long) @ Use org.elasticsearch.lucene.document.NumericField#newRangeLongQuery(java.lang.String, long, long) instead.
68+
org.apache.lucene.document.IntField#newExactQuery(java.lang.String, int) @ Use org.elasticsearch.lucene.document.NumericField#newExactIntQuery(java.lang.String, int) instead.
69+
org.apache.lucene.document.IntField#newRangeQuery(java.lang.String, int, int) @ Use org.elasticsearch.lucene.document.NumericField#newRangeIntQuery(java.lang.String, int, int) instead.
70+
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 & 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
@@ -479,4 +479,5 @@
479479
exports org.elasticsearch.monitor.metrics;
480480
exports org.elasticsearch.plugins.internal.rewriter to org.elasticsearch.inference;
481481
exports org.elasticsearch.index.codec.perfield;
482+
exports org.elasticsearch.lucene.search;
482483
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.apache.lucene.index.PointValues;
2121
import org.apache.lucene.index.SortedNumericDocValues;
2222
import org.apache.lucene.search.IndexOrDocValuesQuery;
23-
import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
2423
import org.apache.lucene.search.Query;
2524
import org.elasticsearch.ElasticsearchParseException;
2625
import org.elasticsearch.common.geo.ShapeRelation;
@@ -45,6 +44,7 @@
4544
import org.elasticsearch.index.query.DateRangeIncludingNowQuery;
4645
import org.elasticsearch.index.query.QueryRewriteContext;
4746
import org.elasticsearch.index.query.SearchExecutionContext;
47+
import org.elasticsearch.lucene.search.XIndexSortSortedNumericDocValuesRangeQuery;
4848
import org.elasticsearch.script.DateFieldScript;
4949
import org.elasticsearch.script.Script;
5050
import org.elasticsearch.script.ScriptCompiler;
@@ -674,7 +674,7 @@ public Query rangeQuery(
674674
query = SortedNumericDocValuesField.newSlowRangeQuery(name(), l, u);
675675
}
676676
if (hasDocValues() && context.indexSortedOnField(name())) {
677-
query = new IndexSortSortedNumericDocValuesRangeQuery(name(), l, u, query);
677+
query = new XIndexSortSortedNumericDocValuesRangeQuery(name(), l, u, query);
678678
}
679679
return query;
680680
});

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.apache.lucene.index.LeafReaderContext;
2424
import org.apache.lucene.sandbox.document.HalfFloatPoint;
2525
import org.apache.lucene.search.IndexOrDocValuesQuery;
26-
import org.apache.lucene.search.IndexSortSortedNumericDocValuesRangeQuery;
2726
import org.apache.lucene.search.MatchNoDocsQuery;
2827
import org.apache.lucene.search.Query;
2928
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;
@@ -1147,7 +1148,7 @@ public Query termQuery(String field, Object value, boolean isIndexed, boolean ha
11471148
int v = parse(value, true);
11481149

11491150
if (isIndexed && hasDocValues) {
1150-
return IntField.newExactQuery(field, v);
1151+
return NumericField.newExactIntQuery(field, v);
11511152
} else if (isIndexed) {
11521153
return IntPoint.newExactQuery(field, v);
11531154
} else {
@@ -1224,7 +1225,7 @@ public Query rangeQuery(
12241225
query = SortedNumericDocValuesField.newSlowRangeQuery(field, l, u);
12251226
}
12261227
if (hasDocValues && context.indexSortedOnField(field)) {
1227-
query = new IndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
1228+
query = new XIndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
12281229
}
12291230
return query;
12301231
}
@@ -1331,7 +1332,7 @@ public Query termQuery(String field, Object value, boolean isIndexed, boolean ha
13311332

13321333
long v = parse(value, true);
13331334
if (isIndexed && hasDocValues) {
1334-
return LongField.newExactQuery(field, v);
1335+
return NumericField.newExactLongQuery(field, v);
13351336
} else if (isIndexed) {
13361337
return LongPoint.newExactQuery(field, v);
13371338
} else {
@@ -1382,7 +1383,7 @@ public Query rangeQuery(
13821383
query = SortedNumericDocValuesField.newSlowRangeQuery(field, l, u);
13831384
}
13841385
if (hasDocValues && context.indexSortedOnField(field)) {
1385-
query = new IndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
1386+
query = new XIndexSortSortedNumericDocValuesRangeQuery(field, l, u, query);
13861387
}
13871388
return query;
13881389
});
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)