summaryrefslogtreecommitdiffstats
path: root/container-search/src/main
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-10-18 15:20:26 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-10-18 15:20:26 +0200
commit30696b58ca0f11d7a7de05ea0707318de3d1bef7 (patch)
tree280c78facd210bd85958cc60003f2be4740e94d8 /container-search/src/main
parent402ea31a2b4b1161efb3c2a9675f712a8c2b6718 (diff)
Remove unranked items not contributing to recall
Diffstat (limited to 'container-search/src/main')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java10
1 files changed, 10 insertions, 0 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 61c41c7dc45..d4b3175aac9 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
@@ -166,6 +166,7 @@ public class QueryRewrite {
switch (optimizeByRestrict(item.getItem(i), restrictParam)) {
case RECALLS_EVERYTHING:
if ((item instanceof OrItem) || (item instanceof EquivItem)) {
+ removeOtherNonrankedChildren(item, i);
recall = Recall.RECALLS_EVERYTHING;
} else if ((item instanceof AndItem) || (item instanceof NearItem)) {
item.removeItem(i);
@@ -191,6 +192,15 @@ public class QueryRewrite {
return recall;
}
+ private static void removeOtherNonrankedChildren(CompositeItem parent, int indexOfChildToKeep) {
+ Item childToKeep = parent.getItem(indexOfChildToKeep);
+ for (int i = parent.getItemCount(); --i >= 0; ) {
+ Item child = parent.getItem(i);
+ if ( child != childToKeep && ! parent.getItem(i).isRanked())
+ parent.removeItem(i);
+ }
+ }
+
private static Item collapseSingleComposites(Item item) {
if (!(item instanceof CompositeItem)) {
return item;