diff --git a/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java b/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java index 06a29d748e..a36f289024 100644 --- a/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java +++ b/core/src/main/java/org/opensearch/sql/expression/function/BuiltinFunctionName.java @@ -188,6 +188,7 @@ public enum BuiltinFunctionName { */ MATCH(FunctionName.of("match")), MATCH_PHRASE(FunctionName.of("match_phrase")), + MATCHPHRASE(FunctionName.of("matchphrase")), /** * Legacy Relevance Function. diff --git a/core/src/main/java/org/opensearch/sql/expression/function/OpenSearchFunctions.java b/core/src/main/java/org/opensearch/sql/expression/function/OpenSearchFunctions.java index 2b148811c4..4b9aefd8e5 100644 --- a/core/src/main/java/org/opensearch/sql/expression/function/OpenSearchFunctions.java +++ b/core/src/main/java/org/opensearch/sql/expression/function/OpenSearchFunctions.java @@ -28,9 +28,15 @@ public class OpenSearchFunctions { public static final int MATCH_PHRASE_MAX_NUM_PARAMETERS = 3; public static final int MIN_NUM_PARAMETERS = 2; + /** + * Add functions specific to OpenSearch to repository. + */ public void register(BuiltinFunctionRepository repository) { repository.register(match()); - repository.register(match_phrase()); + // Register MATCHPHRASE as MATCH_PHRASE as well for backwards + // compatibility. + repository.register(match_phrase(BuiltinFunctionName.MATCH_PHRASE)); + repository.register(match_phrase(BuiltinFunctionName.MATCHPHRASE)); } private static FunctionResolver match() { @@ -38,8 +44,8 @@ private static FunctionResolver match() { return getRelevanceFunctionResolver(funcName, MATCH_MAX_NUM_PARAMETERS); } - private static FunctionResolver match_phrase() { - FunctionName funcName = BuiltinFunctionName.MATCH_PHRASE.getName(); + private static FunctionResolver match_phrase(BuiltinFunctionName matchPhrase) { + FunctionName funcName = matchPhrase.getName(); return getRelevanceFunctionResolver(funcName, MATCH_PHRASE_MAX_NUM_PARAMETERS); } @@ -53,7 +59,9 @@ private static Map getRelevanceFunctionSigna FunctionName funcName, int numOptionalParameters) { FunctionBuilder buildFunction = args -> new OpenSearchFunction(funcName, args); var signatureMapBuilder = ImmutableMap.builder(); - for (int numParameters = MIN_NUM_PARAMETERS; numParameters <= MIN_NUM_PARAMETERS + numOptionalParameters; numParameters++) { + for (int numParameters = MIN_NUM_PARAMETERS; + numParameters <= MIN_NUM_PARAMETERS + numOptionalParameters; + numParameters++) { List args = Collections.nCopies(numParameters, STRING); signatureMapBuilder.put(new FunctionSignature(funcName, args), buildFunction); } diff --git a/docs/user/dql/functions.rst b/docs/user/dql/functions.rst index 6fe206a471..cde48ae25d 100644 --- a/docs/user/dql/functions.rst +++ b/docs/user/dql/functions.rst @@ -2209,6 +2209,8 @@ The match_phrase function maps to the match_phrase query used in search engine, - slop - zero_terms_query +For backward compatibility, matchphrase is also supported and mapped to match_phrase query as well. + Example with only ``field`` and ``query`` expressions, and all other parameters are set default values:: os> SELECT author, title FROM books WHERE match_phrase(author, 'Alexander Milne'); diff --git a/docs/user/ppl/functions/relevance.rst b/docs/user/ppl/functions/relevance.rst index cdbadde2b1..204e942e70 100644 --- a/docs/user/ppl/functions/relevance.rst +++ b/docs/user/ppl/functions/relevance.rst @@ -70,6 +70,8 @@ The match_phrase function maps to the match_phrase query used in search engine, - slop - zero_terms_query +For backward compatibility, matchphrase is also supported and mapped to match_phrase query as well. + Example with only ``field`` and ``query`` expressions, and all other parameters are set default values:: os> source=books | where match_phrase(author, 'Alexander Milne') | fields author, title diff --git a/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/script/filter/FilterQueryBuilder.java b/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/script/filter/FilterQueryBuilder.java index 9aa8e1000b..ec54e8854e 100644 --- a/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/script/filter/FilterQueryBuilder.java +++ b/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/script/filter/FilterQueryBuilder.java @@ -54,6 +54,7 @@ public class FilterQueryBuilder extends ExpressionNodeVisitor' LT_PRTHS aggField=fieldExpression RT_PRTHS + : PERCENTILE LESS value=integerLiteral GREATER LT_PRTHS aggField=fieldExpression RT_PRTHS ; /** expressions */ diff --git a/sql/src/main/antlr/OpenSearchSQLParser.g4 b/sql/src/main/antlr/OpenSearchSQLParser.g4 index 3a90c0f55a..85ebe2703b 100644 --- a/sql/src/main/antlr/OpenSearchSQLParser.g4 +++ b/sql/src/main/antlr/OpenSearchSQLParser.g4 @@ -383,7 +383,7 @@ flowControlFunctionName ; relevanceFunctionName - : MATCH | MATCH_PHRASE + : MATCH | MATCH_PHRASE | MATCHPHRASE ; legacyRelevanceFunctionName