more decoupling of current search context when parsing a query
This commit is contained in:
parent
5836c24b80
commit
d31fdccc97
|
@ -22,7 +22,6 @@ package org.elasticsearch.index.query;
|
|||
import gnu.trove.list.array.TFloatArrayList;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.elasticsearch.ElasticSearchIllegalStateException;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.lucene.search.function.BoostScoreFunction;
|
||||
|
@ -30,7 +29,6 @@ import org.elasticsearch.common.lucene.search.function.FiltersFunctionScoreQuery
|
|||
import org.elasticsearch.common.lucene.search.function.ScoreFunction;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.script.SearchScript;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -152,11 +150,7 @@ public class CustomFiltersScoreQueryParser implements QueryParser {
|
|||
ScoreFunction scoreFunction;
|
||||
String script = scripts.get(i);
|
||||
if (script != null) {
|
||||
SearchContext context = SearchContext.current();
|
||||
if (context == null) {
|
||||
throw new ElasticSearchIllegalStateException("No search context on going...");
|
||||
}
|
||||
SearchScript searchScript = context.scriptService().search(context.lookup(), scriptLang, script, vars);
|
||||
SearchScript searchScript = parseContext.scriptService().search(parseContext.lookup(), scriptLang, script, vars);
|
||||
scoreFunction = new CustomScoreQueryParser.ScriptScoreFunction(script, vars, searchScript);
|
||||
} else {
|
||||
scoreFunction = new BoostScoreFunction(boosts.get(i));
|
||||
|
|
|
@ -22,14 +22,12 @@ package org.elasticsearch.index.query;
|
|||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.search.Explanation;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.elasticsearch.ElasticSearchIllegalStateException;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
|
||||
import org.elasticsearch.common.lucene.search.function.ScoreFunction;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.script.SearchScript;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
@ -92,11 +90,7 @@ public class CustomScoreQueryParser implements QueryParser {
|
|||
throw new QueryParsingException(parseContext.index(), "[custom_score] requires 'script' field");
|
||||
}
|
||||
|
||||
SearchContext context = SearchContext.current();
|
||||
if (context == null) {
|
||||
throw new ElasticSearchIllegalStateException("No search context on going...");
|
||||
}
|
||||
SearchScript searchScript = context.scriptService().search(context.lookup(), scriptLang, script, vars);
|
||||
SearchScript searchScript = parseContext.scriptService().search(parseContext.lookup(), scriptLang, script, vars);
|
||||
FunctionScoreQuery functionScoreQuery = new FunctionScoreQuery(query, new ScriptScoreFunction(script, vars, searchScript));
|
||||
functionScoreQuery.setBoost(boost);
|
||||
return functionScoreQuery;
|
||||
|
|
|
@ -40,6 +40,8 @@ import org.elasticsearch.index.mapper.FieldMappers;
|
|||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
import org.elasticsearch.script.ScriptService;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.search.lookup.SearchLookup;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
@ -89,6 +91,7 @@ public class QueryParseContext {
|
|||
}
|
||||
|
||||
public void reset(XContentParser jp) {
|
||||
this.lookup = null;
|
||||
this.parser = jp;
|
||||
this.namedFilters.clear();
|
||||
}
|
||||
|
@ -274,4 +277,17 @@ public class QueryParseContext {
|
|||
}
|
||||
return Arrays.asList(types);
|
||||
}
|
||||
|
||||
private SearchLookup lookup = null;
|
||||
|
||||
public SearchLookup lookup() {
|
||||
SearchContext current = SearchContext.current();
|
||||
if (current != null) {
|
||||
return current.lookup();
|
||||
}
|
||||
if (lookup == null) {
|
||||
lookup = new SearchLookup(mapperService(), indexCache().fieldData());
|
||||
}
|
||||
return lookup;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue