summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java41
1 files changed, 22 insertions, 19 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java b/container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java
index 341ab342468..0b435c2e32d 100644
--- a/container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java
+++ b/container-search/src/main/java/com/yahoo/search/searchers/QueryValidator.java
@@ -3,8 +3,6 @@ package com.yahoo.search.searchers;
import com.yahoo.component.chain.dependencies.After;
import com.yahoo.component.chain.dependencies.Before;
-import com.yahoo.prelude.Index;
-import com.yahoo.prelude.IndexFacts;
import com.yahoo.prelude.query.HasIndexItem;
import com.yahoo.prelude.query.Item;
import com.yahoo.prelude.query.PrefixItem;
@@ -12,6 +10,9 @@ import com.yahoo.prelude.query.ToolBox;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
+import com.yahoo.search.schema.Field;
+import com.yahoo.search.schema.FieldInfo;
+import com.yahoo.search.schema.SchemaInfo;
import com.yahoo.search.searchchain.Execution;
import com.yahoo.search.searchchain.PhaseNames;
@@ -28,36 +29,36 @@ public class QueryValidator extends Searcher {
@Override
public Result search(Query query, Execution execution) {
- IndexFacts.Session session = execution.context().getIndexFacts().newSession(query);
+ var session = execution.context().schemaInfo().newSession(query);
ToolBox.visit(new TermSearchValidator(session), query.getModel().getQueryTree().getRoot());
- ToolBox.visit(new PrefixSearchValidator(session), query.getModel().getQueryTree().getRoot());
+ // ToolBox.visit(new PrefixSearchValidator(session), query.getModel().getQueryTree().getRoot()); TODO: Enable check and QueryValidatorPrefixTest
return execution.search(query);
}
private abstract static class TermValidator extends ToolBox.QueryVisitor {
- final IndexFacts.Session session;
+ final SchemaInfo.Session schema;
- public TermValidator(IndexFacts.Session session) {
- this.session = session;
+ public TermValidator(SchemaInfo.Session schema) {
+ this.schema = schema;
}
- @Override
- public void onExit() { }
-
}
private static class TermSearchValidator extends TermValidator {
- public TermSearchValidator(IndexFacts.Session session) {
- super(session);
+ public TermSearchValidator(SchemaInfo.Session schema) {
+ super(schema);
}
@Override
public boolean visit(Item item) {
if (item instanceof HasIndexItem indexItem) {
- if (session.getIndex(indexItem.getIndexName()).isTensor())
- throw new IllegalArgumentException("Cannot search for terms in '" + indexItem.getIndexName() + "': It is a tensor field");
+ var field = schema.fieldInfo(indexItem.getIndexName());
+ if (! field.isPresent()) return true;
+ if (field.get().type().kind() == Field.Type.Kind.TENSOR)
+ throw new IllegalArgumentException("Cannot search for terms in '" + indexItem.getIndexName() +
+ "': It is a tensor field");
}
return true;
}
@@ -66,17 +67,19 @@ public class QueryValidator extends Searcher {
private static class PrefixSearchValidator extends TermValidator {
- public PrefixSearchValidator(IndexFacts.Session session) {
- super(session);
+ public PrefixSearchValidator(SchemaInfo.Session schema) {
+ super(schema);
}
@Override
public boolean visit(Item item) {
+ if (schema.isStreaming()) return true; // prefix is always supported
if (item instanceof PrefixItem prefixItem) {
- Index index = session.getIndex(prefixItem.getIndexName());
- if ( ! index.isAttribute())
+ var field = schema.fieldInfo(prefixItem.getIndexName());
+ if (! field.isPresent()) return true;
+ if ( ! field.get().isAttribute())
throw new IllegalArgumentException("'" + prefixItem.getIndexName() + "' is not an attribute field: Prefix matching is not supported");
- if (index.isIndex()) // index overrides attribute
+ if (field.get().isIndex()) // index overrides attribute
throw new IllegalArgumentException("'" + prefixItem.getIndexName() + "' is an index field: Prefix matching is not supported even when it is also an attribute");
}
return true;