summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java8
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java69
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java1
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());
}