8
8
package org .elasticsearch .xpack .esql .expression .function .fulltext ;
9
9
10
10
import org .apache .lucene .util .BytesRef ;
11
+ import org .elasticsearch .TransportVersions ;
11
12
import org .elasticsearch .common .io .stream .NamedWriteableRegistry ;
12
13
import org .elasticsearch .common .io .stream .StreamInput ;
13
14
import org .elasticsearch .common .io .stream .StreamOutput ;
15
+ import org .elasticsearch .index .query .QueryBuilder ;
14
16
import org .elasticsearch .xpack .esql .capabilities .Validatable ;
15
17
import org .elasticsearch .xpack .esql .common .Failure ;
16
18
import org .elasticsearch .xpack .esql .common .Failures ;
17
19
import org .elasticsearch .xpack .esql .core .expression .Expression ;
18
20
import org .elasticsearch .xpack .esql .core .expression .FieldAttribute ;
19
21
import org .elasticsearch .xpack .esql .core .expression .TypeResolutions ;
22
+ import org .elasticsearch .xpack .esql .core .planner .ExpressionTranslator ;
20
23
import org .elasticsearch .xpack .esql .core .querydsl .query .QueryStringQuery ;
21
24
import org .elasticsearch .xpack .esql .core .tree .NodeInfo ;
22
25
import org .elasticsearch .xpack .esql .core .tree .Source ;
27
30
import org .elasticsearch .xpack .esql .expression .function .Param ;
28
31
import org .elasticsearch .xpack .esql .expression .function .scalar .convert .AbstractConvertFunction ;
29
32
import org .elasticsearch .xpack .esql .io .stream .PlanStreamInput ;
33
+ import org .elasticsearch .xpack .esql .planner .EsqlExpressionTranslators ;
30
34
import org .elasticsearch .xpack .esql .type .EsqlDataTypeConverter ;
31
35
32
36
import java .io .IOException ;
@@ -109,22 +113,33 @@ public Match(
109
113
description = "Value to find in the provided field."
110
114
) Expression matchQuery
111
115
) {
112
- super (source , matchQuery , List .of (field , matchQuery ));
116
+ this (source , field , matchQuery , null );
117
+ }
118
+
119
+ public Match (Source source , Expression field , Expression matchQuery , QueryBuilder queryBuilder ) {
120
+ super (source , matchQuery , List .of (field , matchQuery ), queryBuilder );
113
121
this .field = field ;
114
122
}
115
123
116
124
private static Match readFrom (StreamInput in ) throws IOException {
117
125
Source source = Source .readFrom ((PlanStreamInput ) in );
118
126
Expression field = in .readNamedWriteable (Expression .class );
119
127
Expression query = in .readNamedWriteable (Expression .class );
120
- return new Match (source , field , query );
128
+ QueryBuilder queryBuilder = null ;
129
+ if (in .getTransportVersion ().onOrAfter (TransportVersions .ESQL_QUERY_BUILDER_IN_SEARCH_FUNCTIONS )) {
130
+ queryBuilder = in .readOptionalNamedWriteable (QueryBuilder .class );
131
+ }
132
+ return new Match (source , field , query , queryBuilder );
121
133
}
122
134
123
135
@ Override
124
136
public void writeTo (StreamOutput out ) throws IOException {
125
137
source ().writeTo (out );
126
138
out .writeNamedWriteable (field ());
127
139
out .writeNamedWriteable (query ());
140
+ if (out .getTransportVersion ().onOrAfter (TransportVersions .ESQL_QUERY_BUILDER_IN_SEARCH_FUNCTIONS )) {
141
+ out .writeOptionalNamedWriteable (queryBuilder ());
142
+ }
128
143
}
129
144
130
145
@ Override
@@ -224,12 +239,12 @@ public Object queryAsObject() {
224
239
225
240
@ Override
226
241
public Expression replaceChildren (List <Expression > newChildren ) {
227
- return new Match (source (), newChildren .get (0 ), newChildren .get (1 ));
242
+ return new Match (source (), newChildren .get (0 ), newChildren .get (1 ), queryBuilder () );
228
243
}
229
244
230
245
@ Override
231
246
protected NodeInfo <? extends Expression > info () {
232
- return NodeInfo .create (this , Match ::new , field , query ());
247
+ return NodeInfo .create (this , Match ::new , field , query (), queryBuilder () );
233
248
}
234
249
235
250
protected TypeResolutions .ParamOrdinal queryParamOrdinal () {
@@ -245,6 +260,16 @@ public String functionType() {
245
260
return isOperator () ? "operator" : super .functionType ();
246
261
}
247
262
263
+ @ Override
264
+ protected ExpressionTranslator <Match > translator () {
265
+ return new EsqlExpressionTranslators .MatchFunctionTranslator ();
266
+ }
267
+
268
+ @ Override
269
+ public Expression replaceQueryBuilder (QueryBuilder queryBuilder ) {
270
+ return new Match (source (), field , query (), queryBuilder );
271
+ }
272
+
248
273
@ Override
249
274
public String functionName () {
250
275
return isOperator () ? ":" : super .functionName ();
0 commit comments