Skip to content

Add relevance search function support for unified SQL query#5279

Draft
dai-chen wants to merge 1 commit intoopensearch-project:mainfrom
dai-chen:feature/register-fulltext-search-calcite-sql
Draft

Add relevance search function support for unified SQL query#5279
dai-chen wants to merge 1 commit intoopensearch-project:mainfrom
dai-chen:feature/register-fulltext-search-calcite-sql

Conversation

@dai-chen
Copy link
Copy Markdown
Collaborator

@dai-chen dai-chen commented Mar 27, 2026

Description

Enable 7 PPL relevance search functions (match, matchphrase, matchboolprefix, matchphraseprefix, simplequerystring, querystring, multi_match) in the Calcite SQL planning path.

  • Type checker fix: Calcite's FamilyOperandTypeChecker.checkOperandTypes() requires exact operand count match against the family list size, rejecting valid calls with fewer optional args. UDFOperandMetadata.wrap() now delegates to PPL's existing type checkers (PPLFamilyTypeCheckerWrapper, PPLCompositeTypeChecker)
    which correctly handle variable-arity.
  • Function registration: PPL resolves functions via PPLFuncImpTable and does not read the FrameworkConfig operator table. The SQL path requires explicit registration — PPLSqlExtensionFunctions provides a dedicated operator table chained into the SQL FrameworkConfig.

Relevance Search Function Support Matrix

Function SQL V2 (Legacy) PPL V3 (Calcite) SQL (Calcite) — this PR
match
match_phrase
match_bool_prefix
match_phrase_prefix
multi_match
simple_query_string
query_string
query (no-field)
wildcard_query
score / scorequery
match_query (alias)
matchphrase (alias)

Note: SQL V2 supports additional aliases (matchquery, matchphrase, multimatch, wildcardquery, matchphrasequery, multimatchquery) that are not listed separately. The Calcite SQL path uses MAP literal syntax for parameters (MAP['field', col], MAP['query', 'text']), while SQL V2 uses native syntax (match(field,
'text')).

Related Issues

Part of #5248

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@dai-chen dai-chen self-assigned this Mar 27, 2026
@dai-chen dai-chen added enhancement New feature or request SQL labels Mar 27, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Failed to generate code suggestions for PR

Add lightweight SQL operators and a convertlet table that enables
relevance search functions (match, match_phrase, match_bool_prefix,
match_phrase_prefix, multi_match, simple_query_string, query_string)
in the unified query SQL planning path.

The SQL path uses MAP literal syntax for parameters:
  SELECT * FROM t WHERE match(MAP['field', name], MAP['query', 'text'])

Implementation:
- SqlExtensionFunctions: lightweight operators for SQL parsing and
  validation, chained with SqlStdOperatorTable via FrameworkConfig
- RelevanceSearchConvertletTable: swaps lightweight operators with PPL
  operators (PPLBuiltinOperators) during SqlToRelConverter, bypassing
  the PPL type checker entirely
- UnifiedQueryContext: wires operator table and convertlet table

The convertlet approach avoids touching core/ module. The PPL path
continues to resolve functions via PPLFuncImpTable independently.

Natural syntax with named parameters (field => name, query => 'text')
is blocked by CALCITE-6245: checkRollUp incorrectly resolves parameter
name identifiers as column references for scalar functions in WHERE.

Signed-off-by: Chen Dai <daichen@amazon.com>
@dai-chen dai-chen force-pushed the feature/register-fulltext-search-calcite-sql branch from 8e54956 to 5f80dfc Compare March 28, 2026 01:27
@github-actions
Copy link
Copy Markdown
Contributor

Failed to generate code suggestions for PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request SQL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant