apache / apache/lucene

Fix corner case in TestKnnVectorQuery.testRandomWithFilter [LUCENE-10589]

Open
#11,625 6 comments 0 reactions 0 assignees View on GitHub
legacy-jira-priority:Minor type:enhancement
Dominant language
Java
Stars
3.6k
Forks
1.4k
Avg merge
2d 11h
Merged PRs (30d)
88

Description

`TestKnnVectorQuery.testRandomWithFilter` can fail with java.lang.UnsupportedOperationException.

Reproducible command

```java
./gradlew test --tests TestKnnVectorQuery.testRandomWithFilter -Dtests.seed=1DA39B92702DAC45 -Dtests.multiplier=3
```

```java
org.apache.lucene.search.TestKnnVectorQuery > testRandomWithFilter FAILED
java.lang.UnsupportedOperationException: exact search is not supported
at __randomizedtesting.SeedInfo.seed([1DA39B92702DAC45:6BEAC2197AD96AE0]:0)
at org.apache.lucene.search.TestKnnVectorQuery$ThrowingKnnVectorQuery.exactSearch(TestKnnVectorQuery.java:715)
at org.apache.lucene.search.KnnVectorQuery.searchLeaf(KnnVectorQuery.java:151)
at org.apache.lucene.search.KnnVectorQuery.rewrite(KnnVectorQuery.java:108)
at org.apache.lucene.search.ConstantScoreQuery.rewrite(ConstantScoreQuery.java:44)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:789)
at org.apache.lucene.tests.search.AssertingIndexSearcher.rewrite(AssertingIndexSearcher.java:69)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:803)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:685)
at org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:667)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:584)
at org.apache.lucene.search.TestKnnVectorQuery.testRandomWithFilter(TestKnnVectorQuery.java:556)
```

In some edge cases (depending on the random seed), [KnnVectorQuery.java#147](https://github.com/apache/lucene/blob/fe9d26178d033f585c08a5e86708063ac0ec0c9e/lucene/core/src/java/org/apache/lucene/search/KnnVectorQuery.java#L147) becomes false, and then `exactSearch()` is called.

The upper bound of [the test range query (filter)](https://github.com/apache/lucene/blob/fe9d26178d033f585c08a5e86708063ac0ec0c9e/lucene/core/src/test/org/apache/lucene/search/TestKnnVectorQuery.java#L554) could be 200 (the max value of "tag" field + 1) instead of lower + 150 to make it "unrestrictive"?

---
Migrated from [LUCENE-10589](https://issues.apache.org/jira/browse/LUCENE-10589) by Tomoko Uchida (@mocobeta), updated Jul 29 2022
Pull requests: https://github.com/apache/lucene/pull/920

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.