Skip to content

Commit 814e43e

Browse files
committed
Wrap non-scoring functions so we always get a DoubleVector
1 parent 36da7b0 commit 814e43e

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/plugin/MatchFunctionIT.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,27 @@ public void testDisjunctionScoringWithNot() {
342342
}
343343
}
344344

345+
public void testScoringWithNoFullTextFunction() {
346+
var query = """
347+
FROM test METADATA _score
348+
| WHERE length(content) > 50
349+
| KEEP id, _score
350+
| SORT _score DESC, id ASC
351+
""";
352+
353+
try (var resp = run(query)) {
354+
assertColumnNames(resp.columns(), List.of("id", "_score"));
355+
assertColumnTypes(resp.columns(), List.of("integer", "double"));
356+
List<List<Object>> values = getValuesList(resp);
357+
assertThat(values.size(), equalTo(1));
358+
359+
assertThat(values.get(0).get(0), equalTo(4));
360+
361+
// Non pushable query gets score of 0.0
362+
assertThat((Double) values.get(0).get(1), equalTo(0.0));
363+
}
364+
}
365+
345366
private void createAndPopulateIndex() {
346367
var indexName = "test";
347368
var client = client().admin().indices();

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/LocalExecutionPlanner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import org.elasticsearch.xpack.esql.enrich.LookupFromIndexService;
7171
import org.elasticsearch.xpack.esql.evaluator.EvalMapper;
7272
import org.elasticsearch.xpack.esql.evaluator.command.GrokEvaluatorExtracter;
73+
import org.elasticsearch.xpack.esql.evaluator.mapper.BooleanToScoringExpressionEvaluator;
7374
import org.elasticsearch.xpack.esql.expression.Order;
7475
import org.elasticsearch.xpack.esql.plan.physical.AggregateExec;
7576
import org.elasticsearch.xpack.esql.plan.physical.DissectExec;
@@ -686,7 +687,9 @@ private PhysicalOperation planFilter(FilterExec filter, LocalExecutionPlannerCon
686687
shardContexts,
687688
usesScore
688689
);
689-
690+
if (usesScore) {
691+
evaluatorFactory = new BooleanToScoringExpressionEvaluator.Factory(evaluatorFactory);
692+
}
690693
return source.with(new FilterOperatorFactory(evaluatorFactory, PlannerUtils.usesScoring(filter)), source.layout);
691694
}
692695

0 commit comments

Comments
 (0)