diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-10-18 15:20:26 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-10-18 15:20:26 +0200 |
commit | 30696b58ca0f11d7a7de05ea0707318de3d1bef7 (patch) | |
tree | 280c78facd210bd85958cc60003f2be4740e94d8 /container-search/src/main | |
parent | 402ea31a2b4b1161efb3c2a9675f712a8c2b6718 (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.java | 10 |
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; |