@@ -409,7 +409,7 @@ public UnresolvedExpression visitMultiFieldRelevanceFunction(
409409 .equals (BuiltinFunctionName .MULTIMATCH .toString ())
410410 || StringUtils .unquoteText (ctx .multiFieldRelevanceFunctionName ().getText ().toUpperCase ())
411411 .equals (BuiltinFunctionName .MULTIMATCHQUERY .toString ()))
412- && ! ctx .getRuleContexts (OpenSearchSQLParser .AlternateMultiMatchQueryFieldContext .class )
412+ && ! ctx .getRuleContexts (OpenSearchSQLParser .AlternateMultiMatchQueryContext .class )
413413 .isEmpty ()) {
414414 return new Function (
415415 ctx .multiFieldRelevanceFunctionName ().getText ().toLowerCase (),
@@ -516,32 +516,17 @@ private List<UnresolvedExpression> alternateMultiMatchArguments(
516516 // all the arguments are defaulted to string values
517517 // to skip environment resolving and function signature resolving
518518 ImmutableList .Builder <UnresolvedExpression > builder = ImmutableList .builder ();
519- String fields = "" ;
520- String query = "" ;
521- for (var arg : ctx .getRuleContexts (
522- OpenSearchSQLParser .AlternateMultiMatchQueryFieldContext .class )) {
523- switch (StringUtils .unquoteText (arg .argName .getText ())) {
524- case "query" :
525- query = StringUtils .unquoteText (arg .argVal .getText ());
526- break ;
527-
528- case "fields" :
529- fields = StringUtils .unquoteText (arg .argVal .getText ());
530- break ;
531-
532- default :
533- throw new SemanticCheckException (
534- String .format ("can't resolve argument %s for %s" ,
535- StringUtils .unquoteText (arg .argName .getText ()),
536- StringUtils .unquoteText (ctx .multiFieldRelevanceFunctionName ().getText ()))
537- );
538- }
539- }
519+ ctx .getRuleContexts (OpenSearchSQLParser .AlternateMultiMatchFieldContext .class ).stream ().findFirst ().ifPresent (
520+ arg ->
521+ builder .add (new UnresolvedArgument ("fields" ,
522+ new RelevanceFieldList (ImmutableMap .of (StringUtils .unquoteText (arg .argVal .getText ()), 1F ))))
523+ );
540524
541- builder .add (new UnresolvedArgument ("fields" ,
542- new RelevanceFieldList (ImmutableMap .of (fields , 1F ))));
543- builder .add (new UnresolvedArgument ("query" ,
544- new Literal (query , DataType .STRING )));
525+ ctx .getRuleContexts (OpenSearchSQLParser .AlternateMultiMatchQueryContext .class ).stream ().findFirst ().ifPresent (
526+ arg ->
527+ builder .add (new UnresolvedArgument ("query" ,
528+ new Literal (StringUtils .unquoteText (arg .argVal .getText ()), DataType .STRING )))
529+ );
545530
546531 // To support old syntax we must support argument keys as quoted strings.
547532 ctx .getRuleContexts (OpenSearchSQLParser .AlternateMultiMatchOptionalArgContext .class )
0 commit comments