summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/querytransform
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-10-17 14:25:58 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-10-17 14:27:13 +0200
commit1c5f99e21b7d1fdd949c619137241c3dd3a901e0 (patch)
treeb5a23056c518e01b30c33126ec061994a16460a5 /container-search/src/main/java/com/yahoo/prelude/querytransform
parent2a44d80a70ab5669bc40eed95753ffdea01ea760 (diff)
Don't remove OR terms which contributes to rank
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/querytransform')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java72
1 files changed, 29 insertions, 43 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 be61ca709d1..61c41c7dc45 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
@@ -41,8 +41,6 @@ public class QueryRewrite {
/**
* Optimizes the given query tree based on its {@link Model#getRestrict()} parameter, if any.
- *
- * @param query to optimize.
*/
public static void optimizeByRestrict(Query query) {
if (query.getModel().getRestrict().size() != 1) {
@@ -56,8 +54,6 @@ public class QueryRewrite {
/**
* Collapses all single-child {@link CompositeItem}s into their parent item.
- *
- * @param query The query whose composites to collapse.
*/
public static void collapseSingleComposites(Query query) {
Item oldRoot = query.getModel().getQueryTree().getRoot();
@@ -70,8 +66,6 @@ public class QueryRewrite {
/**
* Replaces and {@link SimpleIndexedItem} searching in the {@link Hit#SDDOCNAME_FIELD} with an item
* appropriate for the search node.
- *
- * @param query the query to rewrite.
*/
public static void rewriteSddocname(Query query) {
Item oldRoot = query.getModel().getQueryTree().getRoot();
@@ -156,53 +150,45 @@ public class QueryRewrite {
for (int i = item.getItemCount(); --i >= 1; ) {
Item child = item.getItem(i);
switch (optimizeByRestrict(child, restrictParam)) {
- case RECALLS_EVERYTHING:
- return Recall.RECALLS_NOTHING;
- case RECALLS_NOTHING:
- item.removeItem(i);
- break;
+ case RECALLS_EVERYTHING:
+ return Recall.RECALLS_NOTHING;
+ case RECALLS_NOTHING:
+ item.removeItem(i);
+ break;
}
}
return Recall.UNKNOWN_RECALL;
}
private static Recall optimizeCompositeItemByRestrict(CompositeItem item, String restrictParam) {
+ Recall recall = Recall.UNKNOWN_RECALL;
for (int i = item.getItemCount(); --i >= 0; ) {
switch (optimizeByRestrict(item.getItem(i), restrictParam)) {
- case RECALLS_EVERYTHING:
- if ((item instanceof OrItem) || (item instanceof EquivItem)) {
- retainChild(item, i);
- return Recall.RECALLS_EVERYTHING;
- } else if ((item instanceof AndItem) || (item instanceof NearItem)) {
- item.removeItem(i);
- } else if (item instanceof RankItem) {
- // empty
- } else {
- throw new UnsupportedOperationException(item.getClass().getName());
- }
- break;
- case RECALLS_NOTHING:
- if ((item instanceof OrItem) || (item instanceof EquivItem)) {
- item.removeItem(i);
- } else if ((item instanceof AndItem) || (item instanceof NearItem)) {
- return Recall.RECALLS_NOTHING;
- } else if (item instanceof RankItem) {
- item.removeItem(i);
- } else {
- throw new UnsupportedOperationException(item.getClass().getName());
- }
- break;
+ case RECALLS_EVERYTHING:
+ if ((item instanceof OrItem) || (item instanceof EquivItem)) {
+ recall = Recall.RECALLS_EVERYTHING;
+ } else if ((item instanceof AndItem) || (item instanceof NearItem)) {
+ item.removeItem(i);
+ } else if (item instanceof RankItem) {
+ // empty
+ } else {
+ throw new UnsupportedOperationException(item.getClass().getName());
+ }
+ break;
+ case RECALLS_NOTHING:
+ if ((item instanceof OrItem) || (item instanceof EquivItem)) {
+ item.removeItem(i);
+ } else if ((item instanceof AndItem) || (item instanceof NearItem)) {
+ return Recall.RECALLS_NOTHING;
+ } else if (item instanceof RankItem) {
+ item.removeItem(i);
+ } else {
+ throw new UnsupportedOperationException(item.getClass().getName());
+ }
+ break;
}
}
- return Recall.UNKNOWN_RECALL;
- }
-
- private static void retainChild(CompositeItem item, int childIdx) {
- Item child = item.removeItem(childIdx);
- for (int i = item.getItemCount(); --i >= 0; ) {
- item.removeItem(i);
- }
- item.addItem(child);
+ return recall;
}
private static Item collapseSingleComposites(Item item) {