diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-02-03 13:20:27 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-02-03 13:20:27 +0100 |
commit | ee7cccc90c0857e95898fe4cea21b875e2b6c85b (patch) | |
tree | e119433d7fec600321c920dac4f6309001c6e747 /container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java | |
parent | 2bd58b013477ff190b6a678666de5e3cee922ad9 (diff) |
Don't remove ranked terms when recalling all
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java | 21 |
1 files changed, 20 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 84c793a6df1..e35994eb2ab 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 @@ -4,6 +4,8 @@ package com.yahoo.prelude.querytransform; import com.yahoo.prelude.query.AndItem; import com.yahoo.prelude.query.CompositeItem; import com.yahoo.prelude.query.EquivItem; +import com.yahoo.prelude.query.HasIndexItem; +import com.yahoo.prelude.query.IndexedItem; import com.yahoo.prelude.query.Item; import com.yahoo.prelude.query.NearItem; import com.yahoo.prelude.query.NotItem; @@ -169,7 +171,9 @@ public class QueryRewrite { removeOtherNonrankedChildren(item, i); recall = Recall.RECALLS_EVERYTHING; } else if ((item instanceof AndItem) || (item instanceof NearItem)) { - item.removeItem(i); + if ( ! isRanked(item.getItem(i))) { + item.removeItem(i); + } } else if (item instanceof RankItem) { // empty } else { @@ -200,6 +204,21 @@ public class QueryRewrite { parent.removeItem(i); } } + + private static boolean isRanked(Item item) { + if (item instanceof CompositeItem) { + boolean isRanked = false; + for (Item child : ((CompositeItem)item).items()) + isRanked |= isRanked(child); + return isRanked; + } + else if (item instanceof HasIndexItem && Hit.SDDOCNAME_FIELD.equals(((HasIndexItem)item).getIndexName())) { + return false; // No point in ranking by sddocname + } + else { + return item.isRanked(); + } + } private static Item collapseSingleComposites(Item item) { if (!(item instanceof CompositeItem)) { |