diff --git a/core/src/main/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunction.java b/core/src/main/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunction.java index 112bf271c4e00..1113ab9cd93d1 100644 --- a/core/src/main/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunction.java +++ b/core/src/main/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunction.java @@ -119,7 +119,7 @@ public Explanation explainScore(int docId, Explanation subQueryScore) throws IOE @Override public boolean needsScores() { - return script.needsScores(); + return script.needs_score(); } @Override diff --git a/core/src/main/java/org/elasticsearch/script/ScriptContext.java b/core/src/main/java/org/elasticsearch/script/ScriptContext.java index 3f931f659ede8..081a26d1e511a 100644 --- a/core/src/main/java/org/elasticsearch/script/ScriptContext.java +++ b/core/src/main/java/org/elasticsearch/script/ScriptContext.java @@ -46,6 +46,13 @@ * The StatefulFactoryType is an optional class which allows a stateful factory from the * stateless factory type required by the {@link ScriptService}. If defined, the StatefulFactoryType * must have a method named {@code newInstance} which returns an instance of InstanceType. + *

+ * Both the FactoryType and StatefulFactoryType may have abstract methods to indicate + * whether a variable is used in a script. These method should return a {@code boolean} and their name + * should start with {@code needs}, followed by the variable name, with the first letter uppercased. + * For example, to check if a variable {@code doc} is used, a method {@code boolean needsDoc()} should be added. + * If the variable name starts with an underscore, for example, {@code _score}, the needs method would + * be {@code boolean needs_score()}. */ public final class ScriptContext { diff --git a/core/src/main/java/org/elasticsearch/script/SearchScript.java b/core/src/main/java/org/elasticsearch/script/SearchScript.java index 4c50147b22cb6..d0c932a3490d8 100644 --- a/core/src/main/java/org/elasticsearch/script/SearchScript.java +++ b/core/src/main/java/org/elasticsearch/script/SearchScript.java @@ -144,12 +144,11 @@ public Object run() { /** A factory to construct {@link SearchScript} instances. */ public interface LeafFactory { SearchScript newInstance(LeafReaderContext ctx) throws IOException; + /** - * Indicates if document scores may be needed by this {@link SearchScript}. - * - * @return {@code true} if scores are needed. + * Return {@code true} if the script needs {@code _score} calculated, or {@code false} otherwise. */ - boolean needsScores(); + boolean needs_score(); } /** A factory to construct stateful {@link SearchScript} factories for a specific index. */ diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java b/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java index 5fca34beff2af..5a69be8108a66 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java @@ -174,7 +174,7 @@ public SortedBinaryDocValues bytesValues(LeafReaderContext context) throws IOExc @Override public boolean needsScores() { - return script.needsScores(); + return script.needs_score(); } } @@ -246,7 +246,7 @@ public boolean isFloatingPoint() { @Override public boolean needsScores() { - return script.needsScores(); + return script.needs_score(); } @Override @@ -387,7 +387,7 @@ public SortedBinaryDocValues bytesValues(LeafReaderContext context) throws IOExc @Override public boolean needsScores() { - return script.needsScores(); + return script.needs_score(); } } @@ -406,7 +406,7 @@ public WithScript(ValuesSource delegate, SearchScript.LeafFactory script) { @Override public boolean needsScores() { - return script.needsScores(); + return script.needs_score(); } @Override diff --git a/core/src/test/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunctionTests.java b/core/src/test/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunctionTests.java index 369129826e014..bd15805fa60c5 100644 --- a/core/src/test/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunctionTests.java +++ b/core/src/test/java/org/elasticsearch/common/lucene/search/function/ScriptScoreFunctionTests.java @@ -44,7 +44,7 @@ public double runAsDouble() { } @Override - public boolean needsScores() { + public boolean needs_score() { return false; } }); diff --git a/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java b/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java index cfed4c014b345..2bf691e6a36cf 100644 --- a/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java +++ b/core/src/test/java/org/elasticsearch/search/functionscore/ExplainableScriptIT.java @@ -83,7 +83,7 @@ public SearchScript newInstance(LeafReaderContext context) throws IOException { return new MyScript(lookup.doc().getLeafDocLookup(context)); } @Override - public boolean needsScores() { + public boolean needs_score() { return false; } }; diff --git a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionSearchScript.java b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionSearchScript.java index b40a13ef9f0ed..cb19a604623ab 100644 --- a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionSearchScript.java +++ b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionSearchScript.java @@ -54,7 +54,7 @@ class ExpressionSearchScript implements SearchScript.LeafFactory { } @Override - public boolean needsScores() { + public boolean needs_score() { return needsScores; } diff --git a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionTests.java b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionTests.java index 72c5495987004..81f76de6c3611 100644 --- a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionTests.java +++ b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/ExpressionTests.java @@ -47,10 +47,10 @@ private SearchScript.LeafFactory compile(String expression) { } public void testNeedsScores() { - assertFalse(compile("1.2").needsScores()); - assertFalse(compile("doc['d'].value").needsScores()); - assertTrue(compile("1/_score").needsScores()); - assertTrue(compile("doc['d'].value * _score").needsScores()); + assertFalse(compile("1.2").needs_score()); + assertFalse(compile("doc['d'].value").needs_score()); + assertTrue(compile("1/_score").needs_score()); + assertTrue(compile("doc['d'].value * _score").needs_score()); } public void testCompileError() { diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessScriptEngine.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessScriptEngine.java index f070cb39a4523..3ffc16951886a 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessScriptEngine.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/PainlessScriptEngine.java @@ -133,7 +133,7 @@ public SearchScript newInstance(final LeafReaderContext context) { return new ScriptImpl(painlessScript, p, lookup, context); } @Override - public boolean needsScores() { + public boolean needs_score() { return painlessScript.needs_score(); } }; diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/NeedsScoreTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/NeedsScoreTests.java index 021cb31186927..cae7a0e429183 100644 --- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/NeedsScoreTests.java +++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/NeedsScoreTests.java @@ -44,19 +44,19 @@ public void testNeedsScores() { SearchScript.Factory factory = service.compile(null, "1.2", SearchScript.CONTEXT, Collections.emptyMap()); SearchScript.LeafFactory ss = factory.newFactory(Collections.emptyMap(), lookup); - assertFalse(ss.needsScores()); + assertFalse(ss.needs_score()); factory = service.compile(null, "doc['d'].value", SearchScript.CONTEXT, Collections.emptyMap()); ss = factory.newFactory(Collections.emptyMap(), lookup); - assertFalse(ss.needsScores()); + assertFalse(ss.needs_score()); factory = service.compile(null, "1/_score", SearchScript.CONTEXT, Collections.emptyMap()); ss = factory.newFactory(Collections.emptyMap(), lookup); - assertTrue(ss.needsScores()); + assertTrue(ss.needs_score()); factory = service.compile(null, "doc['d'].value * _score", SearchScript.CONTEXT, Collections.emptyMap()); ss = factory.newFactory(Collections.emptyMap(), lookup); - assertTrue(ss.needsScores()); + assertTrue(ss.needs_score()); } } diff --git a/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java b/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java index 4b6713c6a64ca..5a146f75919ce 100644 --- a/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java +++ b/plugins/examples/script-expert-scoring/src/main/java/org/elasticsearch/example/expertscript/ExpertScriptPlugin.java @@ -115,7 +115,7 @@ public double runAsDouble() { } @Override - public boolean needsScores() { + public boolean needs_score() { return false; } }; diff --git a/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java b/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java index 2ca6f2aa0c72e..407b20ef7788c 100644 --- a/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java +++ b/test/framework/src/main/java/org/elasticsearch/script/MockScriptEngine.java @@ -219,7 +219,7 @@ public void setDocument(int doc) { } @Override - public boolean needsScores() { + public boolean needs_score() { return true; } }