Skip to content

Commit e2e996d

Browse files
committed
Remove the need to have toQuery() on ShardContext
1 parent 61a479b commit e2e996d

File tree

7 files changed

+29
-85
lines changed

7 files changed

+29
-85
lines changed

x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/lucene/LuceneQueryExpressionEvaluator.java

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,9 @@
2929
import org.elasticsearch.compute.operator.EvalOperator;
3030
import org.elasticsearch.core.Releasable;
3131
import org.elasticsearch.core.Releasables;
32-
import org.elasticsearch.index.query.QueryBuilder;
3332

3433
import java.io.IOException;
3534
import java.io.UncheckedIOException;
36-
import java.util.List;
3735

3836
/**
3937
* {@link EvalOperator.ExpressionEvaluator} to run a Lucene {@link Query} during
@@ -50,23 +48,6 @@ public record ShardConfig(Query query, IndexSearcher searcher) {}
5048

5149
private ShardState[] perShardState = EMPTY_SHARD_STATES;
5250

53-
public LuceneQueryExpressionEvaluator(
54-
BlockFactory blockFactory,
55-
List<? extends ShardContext> shardContexts,
56-
QueryBuilder queryBuilder
57-
) {
58-
assert shardContexts.isEmpty() == false;
59-
assert queryBuilder != null;
60-
61-
this.blockFactory = blockFactory;
62-
this.shards = new ShardConfig[shardContexts.size()];
63-
64-
int i = 0;
65-
for (ShardContext shardContext : shardContexts) {
66-
this.shards[i++] = new ShardConfig(shardContext.toQuery(queryBuilder), shardContext.searcher());
67-
}
68-
}
69-
7051
public LuceneQueryExpressionEvaluator(BlockFactory blockFactory, ShardConfig[] shards) {
7152
this.blockFactory = blockFactory;
7253
this.shards = shards;
@@ -362,17 +343,15 @@ public void close() {
362343
}
363344

364345
public static class Factory implements EvalOperator.ExpressionEvaluator.Factory {
365-
private final List<? extends ShardContext> shardContexts;
366-
private final QueryBuilder queryBuilder;
346+
private final ShardConfig[] shardConfigs;
367347

368-
public Factory(List<? extends ShardContext> shardContexts, QueryBuilder queryBuilder) {
369-
this.shardContexts = shardContexts;
370-
this.queryBuilder = queryBuilder;
348+
public Factory(ShardConfig[] shardConfigs) {
349+
this.shardConfigs = shardConfigs;
371350
}
372351

373352
@Override
374353
public EvalOperator.ExpressionEvaluator get(DriverContext context) {
375-
return new LuceneQueryExpressionEvaluator(context.blockFactory(), shardContexts, queryBuilder);
354+
return new LuceneQueryExpressionEvaluator(context.blockFactory(), shardConfigs);
376355
}
377356
}
378357
}

x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/lucene/ShardContext.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
package org.elasticsearch.compute.lucene;
99

1010
import org.apache.lucene.search.IndexSearcher;
11-
import org.apache.lucene.search.Query;
12-
import org.elasticsearch.index.query.QueryBuilder;
1311
import org.elasticsearch.search.sort.SortAndFormats;
1412
import org.elasticsearch.search.sort.SortBuilder;
1513

@@ -41,9 +39,4 @@ public interface ShardContext {
4139
* {@code _cat/shards}.
4240
*/
4341
String shardIdentifier();
44-
45-
/**
46-
* Converts a {@link QueryBuilder} to a {@link Query} in the shard
47-
*/
48-
Query toQuery(QueryBuilder queryBuilder);
4942
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/evaluator/EvalMapper.java

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.elasticsearch.compute.data.ElementType;
1717
import org.elasticsearch.compute.data.Page;
1818
import org.elasticsearch.compute.data.Vector;
19-
import org.elasticsearch.compute.lucene.ShardContext;
2019
import org.elasticsearch.compute.operator.DriverContext;
2120
import org.elasticsearch.compute.operator.EvalOperator;
2221
import org.elasticsearch.compute.operator.EvalOperator.ExpressionEvaluator;
@@ -34,6 +33,7 @@
3433
import org.elasticsearch.xpack.esql.evaluator.mapper.ExpressionMapper;
3534
import org.elasticsearch.xpack.esql.expression.function.fulltext.Match;
3635
import org.elasticsearch.xpack.esql.expression.predicate.operator.comparison.InsensitiveEqualsMapper;
36+
import org.elasticsearch.xpack.esql.planner.EsPhysicalOperationProviders.ShardContext;
3737
import org.elasticsearch.xpack.esql.planner.Layout;
3838

3939
import java.util.List;
@@ -61,10 +61,10 @@ public static ExpressionEvaluator.Factory toEvaluator(
6161
FoldContext foldCtx,
6262
Expression exp,
6363
Layout layout,
64-
List<? extends ShardContext> shardContexts
64+
List<ShardContext> shardContexts
6565
) {
6666
if (exp instanceof Match m) {
67-
return m.toEvaluator(shardContexts, m.queryBuilder());
67+
return m.toEvaluator(shardContexts);
6868
} else if (exp instanceof EvaluatorMapper m) {
6969
return m.toEvaluator(new EvaluatorMapper.ToEvaluator() {
7070
@Override
@@ -88,12 +88,7 @@ public FoldContext foldCtx() {
8888

8989
static class BooleanLogic extends ExpressionMapper<BinaryLogic> {
9090
@Override
91-
public ExpressionEvaluator.Factory map(
92-
FoldContext foldCtx,
93-
BinaryLogic bc,
94-
Layout layout,
95-
List<? extends ShardContext> shardContexts
96-
) {
91+
public ExpressionEvaluator.Factory map(FoldContext foldCtx, BinaryLogic bc, Layout layout, List<ShardContext> shardContexts) {
9792
var leftEval = toEvaluator(foldCtx, bc.left(), layout, shardContexts);
9893
var rightEval = toEvaluator(foldCtx, bc.right(), layout, shardContexts);
9994
/**
@@ -171,7 +166,7 @@ public void close() {
171166

172167
static class Nots extends ExpressionMapper<Not> {
173168
@Override
174-
public ExpressionEvaluator.Factory map(FoldContext foldCtx, Not not, Layout layout, List<? extends ShardContext> shardContexts) {
169+
public ExpressionEvaluator.Factory map(FoldContext foldCtx, Not not, Layout layout, List<ShardContext> shardContexts) {
175170
var expEval = toEvaluator(foldCtx, not.field(), layout);
176171
return dvrCtx -> new org.elasticsearch.xpack.esql.evaluator.predicate.operator.logical.NotEvaluator(
177172
not.source(),
@@ -183,12 +178,7 @@ public ExpressionEvaluator.Factory map(FoldContext foldCtx, Not not, Layout layo
183178

184179
static class Attributes extends ExpressionMapper<Attribute> {
185180
@Override
186-
public ExpressionEvaluator.Factory map(
187-
FoldContext foldCtx,
188-
Attribute attr,
189-
Layout layout,
190-
List<? extends ShardContext> shardContexts
191-
) {
181+
public ExpressionEvaluator.Factory map(FoldContext foldCtx, Attribute attr, Layout layout, List<ShardContext> shardContexts) {
192182
record Attribute(int channel) implements ExpressionEvaluator {
193183
@Override
194184
public Block eval(Page page) {
@@ -223,12 +213,7 @@ public boolean eagerEvalSafeInLazy() {
223213
static class Literals extends ExpressionMapper<Literal> {
224214

225215
@Override
226-
public ExpressionEvaluator.Factory map(
227-
FoldContext foldCtx,
228-
Literal lit,
229-
Layout layout,
230-
List<? extends ShardContext> shardContexts
231-
) {
216+
public ExpressionEvaluator.Factory map(FoldContext foldCtx, Literal lit, Layout layout, List<ShardContext> shardContexts) {
232217
record LiteralsEvaluator(DriverContext context, Literal lit) implements ExpressionEvaluator {
233218
@Override
234219
public Block eval(Page page) {
@@ -285,12 +270,7 @@ private static Block block(Literal lit, BlockFactory blockFactory, int positions
285270
static class IsNulls extends ExpressionMapper<IsNull> {
286271

287272
@Override
288-
public ExpressionEvaluator.Factory map(
289-
FoldContext foldCtx,
290-
IsNull isNull,
291-
Layout layout,
292-
List<? extends ShardContext> shardContexts
293-
) {
273+
public ExpressionEvaluator.Factory map(FoldContext foldCtx, IsNull isNull, Layout layout, List<ShardContext> shardContexts) {
294274
var field = toEvaluator(foldCtx, isNull.field(), layout);
295275
return new IsNullEvaluatorFactory(field);
296276
}
@@ -338,12 +318,7 @@ public String toString() {
338318
static class IsNotNulls extends ExpressionMapper<IsNotNull> {
339319

340320
@Override
341-
public ExpressionEvaluator.Factory map(
342-
FoldContext foldCtx,
343-
IsNotNull isNotNull,
344-
Layout layout,
345-
List<? extends ShardContext> shardContexts
346-
) {
321+
public ExpressionEvaluator.Factory map(FoldContext foldCtx, IsNotNull isNotNull, Layout layout, List<ShardContext> shardContexts) {
347322
return new IsNotNullEvaluatorFactory(toEvaluator(foldCtx, isNotNull.field(), layout));
348323
}
349324

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/evaluator/mapper/ExpressionMapper.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
package org.elasticsearch.xpack.esql.evaluator.mapper;
99

10-
import org.elasticsearch.compute.lucene.ShardContext;
1110
import org.elasticsearch.compute.operator.EvalOperator.ExpressionEvaluator;
1211
import org.elasticsearch.xpack.esql.core.expression.Expression;
1312
import org.elasticsearch.xpack.esql.core.expression.FoldContext;
1413
import org.elasticsearch.xpack.esql.core.util.ReflectionUtils;
14+
import org.elasticsearch.xpack.esql.planner.EsPhysicalOperationProviders.ShardContext;
1515
import org.elasticsearch.xpack.esql.planner.Layout;
1616

1717
import java.util.List;
@@ -23,10 +23,5 @@ public ExpressionMapper() {
2323
typeToken = ReflectionUtils.detectSuperTypeForRuleLike(getClass());
2424
}
2525

26-
public abstract ExpressionEvaluator.Factory map(
27-
FoldContext foldCtx,
28-
E expression,
29-
Layout layout,
30-
List<? extends ShardContext> shardContexts
31-
);
26+
public abstract ExpressionEvaluator.Factory map(FoldContext foldCtx, E expression, Layout layout, List<ShardContext> shardContexts);
3227
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/fulltext/Match.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.elasticsearch.common.io.stream.StreamInput;
1414
import org.elasticsearch.common.io.stream.StreamOutput;
1515
import org.elasticsearch.compute.lucene.LuceneQueryExpressionEvaluator;
16-
import org.elasticsearch.compute.lucene.ShardContext;
16+
import org.elasticsearch.compute.lucene.LuceneQueryExpressionEvaluator.ShardConfig;
1717
import org.elasticsearch.index.query.QueryBuilder;
1818
import org.elasticsearch.xpack.esql.capabilities.PostOptimizationVerificationAware;
1919
import org.elasticsearch.xpack.esql.common.Failure;
@@ -33,8 +33,8 @@
3333
import org.elasticsearch.xpack.esql.expression.function.Param;
3434
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.AbstractConvertFunction;
3535
import org.elasticsearch.xpack.esql.io.stream.PlanStreamInput;
36+
import org.elasticsearch.xpack.esql.planner.EsPhysicalOperationProviders.ShardContext;
3637
import org.elasticsearch.xpack.esql.planner.EsqlExpressionTranslators;
37-
import org.elasticsearch.xpack.esql.planner.Layout;
3838
import org.elasticsearch.xpack.esql.type.EsqlDataTypeConverter;
3939

4040
import java.io.IOException;
@@ -296,10 +296,12 @@ private boolean isOperator() {
296296
return isOperator;
297297
}
298298

299-
public LuceneQueryExpressionEvaluator.Factory toEvaluator(
300-
List<? extends ShardContext> shardContexts,
301-
QueryBuilder queryBuilder
302-
) {
303-
return new LuceneQueryExpressionEvaluator.Factory(shardContexts, queryBuilder);
299+
public LuceneQueryExpressionEvaluator.Factory toEvaluator(List<ShardContext> shardContexts) {
300+
ShardConfig[] shardConfigs = new ShardConfig[shardContexts.size()];
301+
int i = 0;
302+
for (ShardContext shardContext : shardContexts) {
303+
shardConfigs[i++] = new ShardConfig(shardContext.toQuery(queryBuilder()), shardContext.searcher());
304+
}
305+
return new LuceneQueryExpressionEvaluator.Factory(shardConfigs);
304306
}
305307
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/predicate/operator/comparison/InsensitiveEqualsMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
import org.apache.lucene.util.automaton.ByteRunAutomaton;
1313
import org.elasticsearch.common.TriFunction;
1414
import org.elasticsearch.common.lucene.BytesRefs;
15-
import org.elasticsearch.compute.lucene.ShardContext;
1615
import org.elasticsearch.compute.operator.EvalOperator.ExpressionEvaluator;
1716
import org.elasticsearch.xpack.esql.EsqlIllegalArgumentException;
1817
import org.elasticsearch.xpack.esql.core.expression.FoldContext;
1918
import org.elasticsearch.xpack.esql.core.tree.Source;
2019
import org.elasticsearch.xpack.esql.core.type.DataType;
2120
import org.elasticsearch.xpack.esql.evaluator.mapper.ExpressionMapper;
21+
import org.elasticsearch.xpack.esql.planner.EsPhysicalOperationProviders.ShardContext;
2222
import org.elasticsearch.xpack.esql.planner.Layout;
2323

2424
import java.util.List;
@@ -35,7 +35,7 @@ public final ExpressionEvaluator.Factory map(
3535
FoldContext foldCtx,
3636
InsensitiveEquals bc,
3737
Layout layout,
38-
List<? extends ShardContext> shardContexts
38+
List<ShardContext> shardContexts
3939
) {
4040
DataType leftType = bc.left().dataType();
4141
DataType rightType = bc.right().dataType();

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.elasticsearch.compute.data.LocalCircuitBreaker;
1818
import org.elasticsearch.compute.data.Page;
1919
import org.elasticsearch.compute.lucene.LuceneOperator;
20-
import org.elasticsearch.compute.lucene.ShardContext;
2120
import org.elasticsearch.compute.operator.ColumnExtractOperator;
2221
import org.elasticsearch.compute.operator.ColumnLoadOperator;
2322
import org.elasticsearch.compute.operator.Driver;
@@ -91,6 +90,7 @@
9190
import org.elasticsearch.xpack.esql.plan.physical.ProjectExec;
9291
import org.elasticsearch.xpack.esql.plan.physical.ShowExec;
9392
import org.elasticsearch.xpack.esql.plan.physical.TopNExec;
93+
import org.elasticsearch.xpack.esql.planner.EsPhysicalOperationProviders.ShardContext;
9494
import org.elasticsearch.xpack.esql.plugin.QueryPragmas;
9595
import org.elasticsearch.xpack.esql.session.Configuration;
9696

@@ -130,7 +130,7 @@ public class LocalExecutionPlanner {
130130
private final EnrichLookupService enrichLookupService;
131131
private final LookupFromIndexService lookupFromIndexService;
132132
private final PhysicalOperationProviders physicalOperationProviders;
133-
private final List<? extends ShardContext> shardContexts;
133+
private final List<ShardContext> shardContexts;
134134

135135
public LocalExecutionPlanner(
136136
String sessionId,
@@ -145,7 +145,7 @@ public LocalExecutionPlanner(
145145
EnrichLookupService enrichLookupService,
146146
LookupFromIndexService lookupFromIndexService,
147147
PhysicalOperationProviders physicalOperationProviders,
148-
List<? extends ShardContext> shardContexts
148+
List<ShardContext> shardContexts
149149
) {
150150

151151
this.sessionId = sessionId;

0 commit comments

Comments
 (0)