Skip to content

Commit d2c08b3

Browse files
Skyring100reta
andauthored
Optimize UnsignedLong range queries to convert to MatchNoDocsQuery when lower > upper bounds (#14416)
* Added check for lower > upper at end of function Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Fixed mistake of using < operator on BigInteger, now using compareTo Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Fixed simple mistake of flipping > operator Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Fixed space formatting Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Updated CHANGELOG.md Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Issue number linked in CHANGELOG.md Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * doTestDocValueRangeQueries now accepts MatchNoDocsQuery alongside IndexOrDocValuesQuery Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * dotestdoTestDocValueRangeQueries only checks indexQuery and randomAccessQuery only when query is type IndexIndexOrDocValuesQuery Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Ran gradlew spotlessApply to fix import formatting issues Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> * Imported Matchers.either method instead of entire Matchers class Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> --------- Signed-off-by: Skyring100 <106502383+Skyring100@users.noreply.github.com> Signed-off-by: Andriy Redko <andriy.redko@aiven.io> Co-authored-by: Andriy Redko <andriy.redko@aiven.io>
1 parent 761e207 commit d2c08b3

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
2323
- Bump `opentelemetry` from 1.36.0 to 1.39.0 ([#14457](https://github.com/opensearch-project/OpenSearch/pull/14457))
2424

2525
### Changed
26+
- unsignedLongRangeQuery now returns MatchNoDocsQuery if the lower bounds are greater than the upper bounds ([#14416](https://github.com/opensearch-project/OpenSearch/pull/14416))
2627
- Updated the `indices.query.bool.max_clause_count` setting from being static to dynamically updateable ([#13568](https://github.com/opensearch-project/OpenSearch/pull/13568))
2728
- Make the class CommunityIdProcessor final ([#14448](https://github.com/opensearch-project/OpenSearch/pull/14448))
2829

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

+3
Original file line numberDiff line numberDiff line change
@@ -1410,6 +1410,9 @@ public static Query unsignedLongRangeQuery(
14101410
u = u.subtract(BigInteger.ONE);
14111411
}
14121412
}
1413+
if (l.compareTo(u) > 0) {
1414+
return new MatchNoDocsQuery();
1415+
}
14131416
return builder.apply(l, u);
14141417
}
14151418
}

server/src/test/java/org/opensearch/index/mapper/NumberFieldTypeTests.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import java.util.function.Supplier;
8787

8888
import static org.hamcrest.Matchers.containsString;
89+
import static org.hamcrest.Matchers.either;
8990
import static org.hamcrest.Matchers.equalTo;
9091
import static org.hamcrest.Matchers.instanceOf;
9192

@@ -673,9 +674,11 @@ public void doTestDocValueRangeQueries(NumberType type, Supplier<Number> valueSu
673674
true,
674675
MOCK_QSC
675676
);
676-
assertThat(query, instanceOf(IndexOrDocValuesQuery.class));
677-
IndexOrDocValuesQuery indexOrDvQuery = (IndexOrDocValuesQuery) query;
678-
assertEquals(searcher.count(indexOrDvQuery.getIndexQuery()), searcher.count(indexOrDvQuery.getRandomAccessQuery()));
677+
assertThat(query, either(instanceOf(IndexOrDocValuesQuery.class)).or(instanceOf(MatchNoDocsQuery.class)));
678+
if (query instanceof IndexOrDocValuesQuery) {
679+
IndexOrDocValuesQuery indexOrDvQuery = (IndexOrDocValuesQuery) query;
680+
assertEquals(searcher.count(indexOrDvQuery.getIndexQuery()), searcher.count(indexOrDvQuery.getRandomAccessQuery()));
681+
}
679682
}
680683
reader.close();
681684
dir.close();

0 commit comments

Comments
 (0)