summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-08-19 11:52:10 +0200
committerJon Bratseth <bratseth@gmail.com>2022-08-19 11:52:10 +0200
commit7a6b75c6d8769e21de50cc620abcd5263fb8d2f7 (patch)
tree4adbffbecb7c17990faa33cf61fea99852c6556d /container-search
parenta520fda96ce01c92f28ea4c6b700a39396544d2e (diff)
No defaultIndex in filter
Diffstat (limited to 'container-search')
-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
4 files changed, 75 insertions, 8 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;
+ }
+
+}