|
7 | 7 |
|
8 | 8 | package org.elasticsearch.xpack.esql.expression.function.fulltext; |
9 | 9 |
|
10 | | -import org.apache.lucene.util.BytesRef; |
11 | 10 | import org.elasticsearch.TransportVersions; |
12 | 11 | import org.elasticsearch.common.io.stream.NamedWriteableRegistry; |
13 | 12 | import org.elasticsearch.common.io.stream.StreamInput; |
14 | 13 | import org.elasticsearch.common.io.stream.StreamOutput; |
15 | 14 | import org.elasticsearch.index.query.QueryBuilder; |
16 | 15 | import org.elasticsearch.xpack.esql.core.InvalidArgumentException; |
17 | | -import org.elasticsearch.xpack.esql.core.expression.EntryExpression; |
18 | 16 | import org.elasticsearch.xpack.esql.core.expression.Expression; |
19 | | -import org.elasticsearch.xpack.esql.core.expression.Literal; |
20 | 17 | import org.elasticsearch.xpack.esql.core.expression.MapExpression; |
21 | 18 | import org.elasticsearch.xpack.esql.core.querydsl.query.Query; |
22 | 19 | import org.elasticsearch.xpack.esql.core.querydsl.query.QueryStringQuery; |
23 | 20 | import org.elasticsearch.xpack.esql.core.tree.NodeInfo; |
24 | 21 | import org.elasticsearch.xpack.esql.core.tree.Source; |
25 | 22 | import org.elasticsearch.xpack.esql.core.type.DataType; |
26 | | -import org.elasticsearch.xpack.esql.core.type.DataTypeConverter; |
27 | 23 | import org.elasticsearch.xpack.esql.expression.function.Example; |
28 | 24 | import org.elasticsearch.xpack.esql.expression.function.FunctionAppliesTo; |
29 | 25 | import org.elasticsearch.xpack.esql.expression.function.FunctionAppliesToLifecycle; |
|
42 | 38 | import java.util.Set; |
43 | 39 |
|
44 | 40 | import static java.util.Map.entry; |
45 | | -import static org.elasticsearch.common.logging.LoggerMessageFormat.format; |
46 | 41 | import static org.elasticsearch.index.query.QueryStringQueryBuilder.ALLOW_LEADING_WILDCARD_FIELD; |
47 | 42 | import static org.elasticsearch.index.query.QueryStringQueryBuilder.ANALYZER_FIELD; |
48 | 43 | import static org.elasticsearch.index.query.QueryStringQueryBuilder.ANALYZE_WILDCARD_FIELD; |
|
65 | 60 | import static org.elasticsearch.index.query.QueryStringQueryBuilder.TIME_ZONE_FIELD; |
66 | 61 | import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.ParamOrdinal.FIRST; |
67 | 62 | import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.ParamOrdinal.SECOND; |
68 | | -import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isFoldable; |
69 | 63 | import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isMapExpression; |
70 | 64 | import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isNotNull; |
71 | 65 | import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isNotNullAndFoldable; |
@@ -330,33 +324,7 @@ private Map<String, Object> queryStringOptions() throws InvalidArgumentException |
330 | 324 | } |
331 | 325 |
|
332 | 326 | Map<String, Object> matchOptions = new HashMap<>(); |
333 | | - for (EntryExpression entry : ((MapExpression) options()).entryExpressions()) { |
334 | | - Expression optionExpr = entry.key(); |
335 | | - Expression valueExpr = entry.value(); |
336 | | - TypeResolution resolution = isFoldable(optionExpr, sourceText(), SECOND).and(isFoldable(valueExpr, sourceText(), SECOND)); |
337 | | - if (resolution.unresolved()) { |
338 | | - throw new InvalidArgumentException(resolution.message()); |
339 | | - } |
340 | | - Object optionExprLiteral = ((Literal) optionExpr).value(); |
341 | | - Object valueExprLiteral = ((Literal) valueExpr).value(); |
342 | | - String optionName = optionExprLiteral instanceof BytesRef br ? br.utf8ToString() : optionExprLiteral.toString(); |
343 | | - String optionValue = valueExprLiteral instanceof BytesRef br ? br.utf8ToString() : valueExprLiteral.toString(); |
344 | | - // validate the optionExpr is supported |
345 | | - DataType dataType = ALLOWED_OPTIONS.get(optionName); |
346 | | - if (dataType == null) { |
347 | | - throw new InvalidArgumentException( |
348 | | - format(null, "Invalid option [{}] in [{}], expected one of {}", optionName, sourceText(), ALLOWED_OPTIONS.keySet()) |
349 | | - ); |
350 | | - } |
351 | | - try { |
352 | | - matchOptions.put(optionName, DataTypeConverter.convert(optionValue, dataType)); |
353 | | - } catch (InvalidArgumentException e) { |
354 | | - throw new InvalidArgumentException( |
355 | | - format(null, "Invalid option [{}] in [{}], {}", optionName, sourceText(), e.getMessage()) |
356 | | - ); |
357 | | - } |
358 | | - } |
359 | | - |
| 327 | + populateOptionsMap((MapExpression) options(), matchOptions, SECOND, sourceText(), ALLOWED_OPTIONS); |
360 | 328 | return matchOptions; |
361 | 329 | } |
362 | 330 |
|
|
0 commit comments