diff options
5 files changed, 75 insertions, 9 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java index 2d76db889b8..f838e96c930 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java @@ -161,9 +161,9 @@ public abstract class AbstractParser implements CustomParser { if (filterToParse != null) { AnyParser filterParser = new AnyParser(environment); if (root == null) { - root = filterParser.parseFilter(filterToParse, parsingLanguage, indexFacts, defaultIndex); + root = filterParser.parseFilter(filterToParse, parsingLanguage, indexFacts); } else { - root = filterParser.applyFilter(root, filterToParse, parsingLanguage, indexFacts, defaultIndex); + root = filterParser.applyFilter(root, filterToParse, parsingLanguage, indexFacts); } } return simplifyPhrases(root); diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java index bf778409364..7fc4c823018 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java @@ -34,8 +34,8 @@ public class AnyParser extends SimpleParser { return anyItems(true); } - Item parseFilter(String filter, Language queryLanguage, IndexFacts.Session indexFacts, String defaultIndex) { - setState(queryLanguage, indexFacts, defaultIndex); + Item parseFilter(String filter, Language queryLanguage, IndexFacts.Session indexFacts) { + setState(queryLanguage, indexFacts, null); tokenize(filter, null, indexFacts, queryLanguage); Item filterRoot = anyItems(true); @@ -122,8 +122,8 @@ public class AnyParser extends SimpleParser { } } - Item applyFilter(Item root, String filter, Language queryLanguage, IndexFacts.Session indexFacts, String defaultIndex) { - setState(queryLanguage, indexFacts, defaultIndex); + Item applyFilter(Item root, String filter, Language queryLanguage, IndexFacts.Session indexFacts) { + setState(queryLanguage, indexFacts, null); tokenize(filter, null, indexFacts, queryLanguage); return filterItems(root); } diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java index 88490237fc7..9d9aee54df0 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java @@ -25,7 +25,6 @@ import com.yahoo.search.query.parser.ParserEnvironment; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import static com.yahoo.prelude.query.parser.Token.Kind.*; @@ -220,7 +219,6 @@ abstract class StructuredParser extends AbstractParser { item = indexPrefix(); } } - return item; } finally { if (item == null) { diff --git a/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java b/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java new file mode 100644 index 00000000000..082cede5ff4 --- /dev/null +++ b/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java @@ -0,0 +1,69 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.test; + +import com.yahoo.language.Language; +import com.yahoo.language.Linguistics; +import com.yahoo.language.simple.SimpleLinguistics; +import com.yahoo.prelude.Index; +import com.yahoo.prelude.IndexFacts; +import com.yahoo.prelude.IndexModel; +import com.yahoo.prelude.SearchDefinition; +import com.yahoo.search.Query; +import com.yahoo.search.searchchain.Execution; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author bratseth + */ +public class QueryWithFilterTestCase { + + /** Tests that default-index is not applied to ALL filters */ + @Test + void testRankFilter() { + Query q = newQueryFromEncoded("?query=trump" + + "&model.type=all" + + "&model.defaultIndex=text" + + "&filter=filterattribute%3Afrontpage_US_en-US"); + assertEquals("RANK text:trump |filterattribute:frontpage_US_en-US", + q.getModel().getQueryTree().toString()); + } + + /** Tests that default-index is not applied to NOT filters */ + @Test + void testAndFilter() { + Query q = newQueryFromEncoded("?query=trump" + + "&model.type=all" + + "&model.defaultIndex=text" + + "&filter=%2B%28filterattribute%3Afrontpage_US_en-US%29"); + assertEquals("AND text:trump |filterattribute:frontpage_US_en-US", + q.getModel().getQueryTree().toString()); + } + + private Query newQueryFromEncoded(String queryString) { + return newQueryFromEncoded(queryString, null, new SimpleLinguistics()); + } + + private Query newQueryFromEncoded(String encodedQueryString, Language language, Linguistics linguistics) { + Query query = new Query(encodedQueryString); + query.getModel().setExecution(new Execution(Execution.Context.createContextStub(createIndexFacts(), + linguistics))); + query.getModel().setLanguage(language); + return query; + } + + private IndexFacts createIndexFacts() { + SearchDefinition sd = new SearchDefinition("test"); + sd.addIndex(new Index("test")); + sd.addIndex(attribute("filterattribute")); + return new IndexFacts(new IndexModel(sd)); + } + + private Index attribute(String name) { + Index index = new Index(name); + index.setExact(true, null); + return index; + } + +} diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java index c8e45f0f61a..29942998083 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java @@ -91,7 +91,6 @@ public final class ScriptExpression extends ExpressionList<StatementExpression> } /** Creates an expression with simple lingustics for testing */ - @SuppressWarnings("deprecation") public static ScriptExpression fromString(String expression) throws ParseException { return fromString(expression, new SimpleLinguistics(), Embedder.throwsOnUse.asMap()); } |