summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2021-04-26 23:59:53 +0200
committerGitHub <noreply@github.com>2021-04-26 23:59:53 +0200
commit26678df50e601dff1ddda1133d328e2b3d2e7ff9 (patch)
treee40da701c2414cd8dbbb9fbe3941f25e2404ba6d
parentcb860b594152af5fdf22ec7f8db6d96299daffdb (diff)
parent2be11f2d5c6f21dd292c20e3d35faaad70815793 (diff)
Merge pull request #17610 from vespa-engine/balder/correct-rank-restrict-optimisation
In the case that the first item in a rank item evaluated to false it …
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java1
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java4
2 files changed, 4 insertions, 1 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java
index 5a936d42ccc..329e886c3d3 100644
--- a/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java
+++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java
@@ -186,6 +186,7 @@ public class QueryRewrite {
} else if ((item instanceof AndItem) || (item instanceof NearItem)) {
return Recall.RECALLS_NOTHING;
} else if (item instanceof RankItem) {
+ if (i == 0) return Recall.RECALLS_NOTHING;
item.removeItem(i);
} else {
throw new UnsupportedOperationException(item.getClass().getName());
diff --git a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java
index 36137abd9b8..6143682c028 100644
--- a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java
@@ -89,8 +89,10 @@ public class QueryRewriteTestCase {
@Test
public void testRestrictRank() {
- assertRewritten("sddocname:per&filter=abc", "espen", "|abc");
+ assertRewritten("sddocname:per&filter=abc", "espen", "NULL");
assertRewritten("sddocname:per&filter=abc", "per", "RANK sddocname:per |abc");
+ assertRewritten("sddocname:per RANK bar", "per", "RANK sddocname:per bar");
+ assertRewritten("sddocname:per RANK bar", "espen", "NULL");
}
private static Query query(String queryString, String restrict) {