Skip to content

Commit 2f8e6ed

Browse files
committed
Adding square parenthesis support for fields parameter.
Signed-off-by: forestmvey <forestv@bitquilltech.com>
1 parent 94a700a commit 2f8e6ed

File tree

3 files changed

+22
-31
lines changed

3 files changed

+22
-31
lines changed

opensearch/src/test/java/org/opensearch/sql/opensearch/storage/script/filter/lucene/MultiMatchTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ class MultiMatchTest {
4040
.dsl(new ExpressionConfig().functionRepository());
4141
private final MultiMatchQuery multiMatchQuery = new MultiMatchQuery();
4242
private final FunctionName multiMatchName = FunctionName.of("multimatch");
43-
private final FunctionName multiMatchWithUnderscoreName = FunctionName.of("multi_match");
44-
private final FunctionName multiMatchQueryName = FunctionName.of("multi_match");
43+
private final FunctionName multi_matchName = FunctionName.of("multi_match");
44+
private final FunctionName multiMatchQueryName = FunctionName.of("multimatchquery");
4545
private final FunctionName[] functionNames =
46-
{multiMatchName, multiMatchWithUnderscoreName, multiMatchQueryName};
46+
{multiMatchName, multi_matchName, multiMatchQueryName};
4747
private static final LiteralExpression fields_value = DSL.literal(
4848
new ExprTupleValue(new LinkedHashMap<>(ImmutableMap.of(
4949
"title", ExprValueUtils.floatValue(1.F),

sql/src/main/antlr/OpenSearchSQLParser.g4

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ multiFieldRelevanceFunction
348348
LT_SQR_PRTHS field=relevanceFieldAndWeight (COMMA field=relevanceFieldAndWeight)* RT_SQR_PRTHS
349349
COMMA query=relevanceQuery (COMMA relevanceArg)* RR_BRACKET
350350
| multiFieldRelevanceFunctionName LR_BRACKET
351-
alternateMultiMatchQueryField COMMA alternateMultiMatchQueryField
351+
alternateMultiMatchQuery COMMA alternateMultiMatchField
352352
(COMMA alternateMultiMatchOptionalArg)* RR_BRACKET
353353
;
354354

@@ -519,6 +519,12 @@ alternateMultiMatchOptionalArg
519519
| argName=stringLiteral EQUAL_SYMBOL argVal=relevanceArgValue
520520
;
521521

522-
alternateMultiMatchQueryField
522+
alternateMultiMatchQuery
523523
: argName=alternateMultiMatchArgName EQUAL_SYMBOL argVal=alternateMultiMatchArgVal
524524
;
525+
526+
alternateMultiMatchField
527+
: argName=alternateMultiMatchArgName EQUAL_SYMBOL argVal=alternateMultiMatchArgVal
528+
| argName=alternateMultiMatchArgName EQUAL_SYMBOL
529+
LT_SQR_PRTHS argVal=alternateMultiMatchArgVal RT_SQR_PRTHS
530+
;

sql/src/main/java/org/opensearch/sql/sql/parser/AstExpressionBuilder.java

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)