diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo')
5 files changed, 7 insertions, 9 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java index 80a2320b039..8cc820d8f76 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java @@ -55,7 +55,6 @@ public class AllParser extends SimpleParser { CompositeItem and = null; NotItem not = null; // Store negatives here as we go Item current; - // Find all items do { current = negativeItem(); diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java index 020d93d951c..27bce6bd027 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java @@ -51,7 +51,6 @@ abstract class SimpleParser extends StructuredParser { Item topLevelItem = null; NotItem not = null; Item item = null; - do { item = positiveItem(); if (item != null) { 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 09be9b3728b..bf814eef057 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 @@ -14,6 +14,7 @@ import com.yahoo.prelude.query.OrItem; import com.yahoo.prelude.query.RankItem; import com.yahoo.prelude.query.SimpleIndexedItem; import com.yahoo.prelude.query.SubstringItem; +import com.yahoo.prelude.query.WeakAndItem; import com.yahoo.search.Query; import com.yahoo.search.query.Model; import com.yahoo.search.result.Hit; @@ -26,8 +27,6 @@ public class QueryRewrite { private enum Recall { RECALLS_EVERYTHING, RECALLS_NOTHING, UNKNOWN_RECALL } - // ------------------- Start public API - /** * Optimize multiple NotItems under and or by collapsing them in to one and leaving * the positive ones behind in its place and moving itself with the original and as its positive item @@ -49,6 +48,7 @@ public class QueryRewrite { return; } Item root = query.getModel().getQueryTree().getRoot(); + if (optimizeByRestrict(root, query.getModel().getRestrict().iterator().next()) == Recall.RECALLS_NOTHING) { query.getModel().getQueryTree().setRoot(new NullItem()); } @@ -170,7 +170,7 @@ public class QueryRewrite { if ((item instanceof OrItem) || (item instanceof EquivItem)) { removeOtherNonrankedChildren(item, i); recall = Recall.RECALLS_EVERYTHING; - } else if ((item instanceof AndItem) || (item instanceof NearItem)) { + } else if ((item instanceof AndItem) || (item instanceof NearItem) || (item instanceof WeakAndItem)) { if ( ! isRanked(item.getItem(i))) { item.removeItem(i); } @@ -183,7 +183,7 @@ public class QueryRewrite { case RECALLS_NOTHING: if ((item instanceof OrItem) || (item instanceof EquivItem)) { item.removeItem(i); - } else if ((item instanceof AndItem) || (item instanceof NearItem)) { + } else if ((item instanceof AndItem) || (item instanceof NearItem) || (item instanceof WeakAndItem)) { return Recall.RECALLS_NOTHING; } else if (item instanceof RankItem) { if (i == 0) return Recall.RECALLS_NOTHING; diff --git a/container-search/src/main/java/com/yahoo/search/query/Model.java b/container-search/src/main/java/com/yahoo/search/query/Model.java index 1b12f3f3bb8..dbaab3045bf 100644 --- a/container-search/src/main/java/com/yahoo/search/query/Model.java +++ b/container-search/src/main/java/com/yahoo/search/query/Model.java @@ -86,7 +86,7 @@ public class Model implements Cloneable { private Locale locale = null; private QueryTree queryTree = null; // The query tree to execute. This is lazily created from the program private String defaultIndex = null; - private Query.Type type = Query.Type.ALL; + private Query.Type type = Query.Type.WEAKAND; private Query parent; private Set<String> sources = new LinkedHashSet<>(); private Set<String> restrict = new LinkedHashSet<>(); diff --git a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java index 15e3b7aab14..a149ae9323a 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java +++ b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java @@ -740,7 +740,7 @@ public class YqlParser implements Parser { if (allowEmpty && (wordData == null || wordData.isEmpty())) return new NullItem(); String grammar = getAnnotation(ast, USER_INPUT_GRAMMAR, String.class, - Query.Type.ALL.toString(), "grammar for handling user input"); + Query.Type.WEAKAND.toString(), "grammar for handling user input"); String defaultIndex = getAnnotation(ast, USER_INPUT_DEFAULT_INDEX, String.class, "default", "default index for user input terms"); Language language = decideParsingLanguage(ast, wordData); @@ -1448,7 +1448,7 @@ public class YqlParser implements Parser { "setting for whether to use substring match of input data"); boolean exact = exactMatch != null ? exactMatch : indexFactsSession.getIndex(indexNameExpander.expand(field)).isExact(); String grammar = getAnnotation(ast, USER_INPUT_GRAMMAR, String.class, - Query.Type.ALL.toString(), "grammar for handling word input"); + Query.Type.WEAKAND.toString(), "grammar for handling word input"); Preconditions.checkArgument((prefixMatch ? 1 : 0) + (substrMatch ? 1 : 0) + (suffixMatch ? 1 : 0) < 2, "Only one of prefix, substring and suffix can be set."); |