Skip to content

Commit 9c7621d

Browse files
move query string after field name list
1 parent 3b334da commit 9c7621d

File tree

1 file changed

+33
-15
lines changed
  • x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/fulltext

1 file changed

+33
-15
lines changed

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

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -269,41 +269,47 @@ public MultiMatch(
269269
// options. We also remember the originally supplied arguments in order to make tests happy.
270270
private final transient List<Expression> fields;
271271
private final transient List<Expression> fieldsOriginal;
272+
private final transient List<Expression> fieldsAndQuery;
272273
private final transient Expression options;
273274
private final transient Expression optionsOriginal;
274275

275-
private static List<Expression> initChildren(Expression query, List<Expression> fields, Expression options) {
276-
Stream<Expression> fieldsAndQuery = Stream.concat(Stream.of(query), fields.stream());
277-
return (options == null ? fieldsAndQuery : Stream.concat(fieldsAndQuery, Stream.of(options))).toList();
276+
private static List<Expression> initChildren(List<Expression> fieldsAndQuery, Expression options) {
277+
return (options == null ? fieldsAndQuery.stream() : Stream.concat(fieldsAndQuery.stream(), Stream.of(options))).toList();
278278
}
279279

280-
private MultiMatch(Source source, Expression query, List<Expression> fields, Expression options, QueryBuilder queryBuilder) {
281-
super(source, query, initChildren(query, fields, options), queryBuilder);
282-
this.fieldsOriginal = fields;
280+
private MultiMatch(Source source, Expression field, List<Expression> fieldsAndQuery, Expression options, QueryBuilder queryBuilder) {
281+
super(
282+
source,
283+
fieldsAndQuery.getLast(),
284+
initChildren(Stream.concat(Stream.of(field), fieldsAndQuery.stream()).toList(), options),
285+
queryBuilder
286+
);
287+
this.fieldsAndQuery = Stream.concat(Stream.of(field), fieldsAndQuery.subList(0, fieldsAndQuery.size()).stream()).toList();
288+
this.fieldsOriginal = Stream.concat(Stream.of(field), fieldsAndQuery.subList(0, fieldsAndQuery.size() - 1).stream()).toList();
283289
this.optionsOriginal = options;
284290

285291
if (options == null || options instanceof MapExpression) {
286-
this.fields = fields;
292+
this.fields = fieldsOriginal;
287293
this.options = options;
288294
} else {
289-
this.fields = Stream.concat(fields.stream(), Stream.of(options)).toList();
295+
this.fields = Stream.concat(fieldsOriginal.stream(), Stream.of(options)).toList();
290296
this.options = null;
291297
}
292298
}
293299

294300
private static MultiMatch readFrom(StreamInput in) throws IOException {
295301
Source source = Source.readFrom((PlanStreamInput) in);
296-
Expression query = in.readNamedWriteable(Expression.class);
297-
List<Expression> fields = in.readNamedWriteableCollectionAsList(Expression.class);
302+
Expression firstField = in.readNamedWriteable(Expression.class);
303+
List<Expression> fieldsAndQuery = in.readNamedWriteableCollectionAsList(Expression.class);
298304
QueryBuilder queryBuilder = in.readOptionalNamedWriteable(QueryBuilder.class);
299-
return new MultiMatch(source, query, fields, null, queryBuilder);
305+
return new MultiMatch(source, firstField, fieldsAndQuery, null, queryBuilder);
300306
}
301307

302308
@Override
303309
public void writeTo(StreamOutput out) throws IOException {
304310
source().writeTo(out);
305-
out.writeNamedWriteable(query());
306-
out.writeNamedWriteableCollection(fields);
311+
out.writeNamedWriteable(fieldsAndQuery.getFirst());
312+
out.writeNamedWriteableCollection(fieldsAndQuery.subList(1, fieldsAndQuery.size() - 1));
307313
out.writeOptionalNamedWriteable(queryBuilder());
308314
}
309315

@@ -331,7 +337,13 @@ public Expression replaceChildren(List<Expression> newChildren) {
331337
@Override
332338
protected NodeInfo<? extends Expression> info() {
333339
// Specifically create new instance with original arguments.
334-
return NodeInfo.create(this, MultiMatch::new, query(), fieldsOriginal, optionsOriginal);
340+
return NodeInfo.create(
341+
this,
342+
MultiMatch::new,
343+
fieldsAndQuery.getFirst(),
344+
fieldsAndQuery.subList(1, fieldsAndQuery.size()),
345+
optionsOriginal
346+
);
335347
}
336348

337349
@Override
@@ -349,7 +361,13 @@ protected Query translate(TranslatorHandler handler) {
349361
@Override
350362
public Expression replaceQueryBuilder(QueryBuilder queryBuilder) {
351363
// Specifically create new instance with original arguments.
352-
return new MultiMatch(source(), query(), fieldsOriginal, optionsOriginal, queryBuilder);
364+
return new MultiMatch(
365+
source(),
366+
fieldsAndQuery.getFirst(),
367+
fieldsAndQuery.subList(1, fieldsAndQuery.size()),
368+
optionsOriginal,
369+
queryBuilder
370+
);
353371
}
354372

355373
public List<Expression> fields() {

0 commit comments

Comments
 (0)