summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java27
1 files changed, 18 insertions, 9 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java b/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
index 8b2438e3ec2..b863440ea5b 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
@@ -5,6 +5,7 @@ import com.google.common.annotations.Beta;
import com.google.inject.Inject;
import com.yahoo.language.Linguistics;
import com.yahoo.language.simple.SimpleLinguistics;
+import com.yahoo.processing.IllegalInputException;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
@@ -28,6 +29,7 @@ import java.util.logging.Logger;
*
* @author Steinar Knutsen
*/
+// TODO: The query model should do this
@Beta
@Provides(MinimalQueryInserter.EXTERNAL_YQL)
@Before(PhaseNames.TRANSFORMED_QUERY)
@@ -40,19 +42,22 @@ public class MinimalQueryInserter extends Searcher {
private static final CompoundName MAX_HITS = new CompoundName("maxHits");
private static final CompoundName MAX_OFFSET = new CompoundName("maxOffset");
- private static Logger log = Logger.getLogger(MinimalQueryInserter.class.getName());
+ private static final Logger log = Logger.getLogger(MinimalQueryInserter.class.getName());
@Inject
public MinimalQueryInserter(Linguistics linguistics) {
// Warmup is needed to avoid a large 400ms init cost during first execution of yql code.
warmup(linguistics);
}
+
public MinimalQueryInserter() {
this(new SimpleLinguistics());
}
+
static boolean warmup() {
return warmup(new SimpleLinguistics());
}
+
private static boolean warmup(Linguistics linguistics) {
Query query = new Query("search/?yql=select%20*%20from%20sources%20where%20title%20contains%20'xyz';");
Result result = insertQuery(query, new ParserEnvironment().setLinguistics(linguistics));
@@ -67,6 +72,18 @@ public class MinimalQueryInserter extends Searcher {
return true;
}
+ @Override
+ public Result search(Query query, Execution execution) {
+ try {
+ if (query.properties().get(YQL) == null) return execution.search(query);
+ Result result = insertQuery(query, ParserEnvironment.fromExecutionContext(execution.context()));
+ return (result == null) ? execution.search(query) : result;
+ }
+ catch (IllegalArgumentException e) {
+ throw new IllegalInputException("Illegal YQL query", e);
+ }
+ }
+
private static Result insertQuery(Query query, ParserEnvironment env) {
YqlParser parser = (YqlParser) ParserFactory.newInstance(Query.Type.YQL, env);
parser.setQueryParser(false);
@@ -116,12 +133,4 @@ public class MinimalQueryInserter extends Searcher {
return null;
}
- @Override
- public Result search(Query query, Execution execution) {
- if (query.properties().get(YQL) == null) return execution.search(query);
-
- Result result = insertQuery(query, ParserEnvironment.fromExecutionContext(execution.context()));
- return (result == null) ? execution.search(query) : result;
- }
-
}