From d6ea633f52f52ee8caf77f455d55f4bf5f18784e Mon Sep 17 00:00:00 2001 From: MaxKsyunz Date: Mon, 16 May 2022 13:33:58 -0700 Subject: [PATCH] Support legacy syntax for match_phrase in the new SQL engine. Add support for matchphrase as an alternative spelling of match_phrase. Mention in both SQL and PPL documentation that matchphrase is accepted as well as match_phrase. Signed-off-by: MaxKsyunz --- .../expression/function/BuiltinFunctionName.java | 1 + .../expression/function/OpenSearchFunctions.java | 16 ++++++++++++---- docs/user/dql/functions.rst | 2 ++ docs/user/ppl/functions/relevance.rst | 2 ++ .../script/filter/FilterQueryBuilder.java | 1 + ppl/src/main/antlr/OpenSearchPPLParser.g4 | 2 +- sql/src/main/antlr/OpenSearchSQLParser.g4 | 2 +- 7 files changed, 20 insertions(+), 6 deletions(-) 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 06a29d748e6..a36f289024c 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 2b148811c46..4b9aefd8e5a 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 6fe206a4712..cde48ae25d0 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 cdbadde2b17..204e942e701 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 9aa8e1000ba..ec54e8854e8 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 3a90c0f55ad..85ebe2703bd 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