Link Search Menu Expand Document Documentation Menu

函数

SQL 语言支持所有 SQL 插件的常见函数,包括相关性搜索,但也引入了一些仅在 SQL 中可用的函数同义词。这些同义词由 V1 引擎提供。更多信息,请参阅限制

匹配查询

MATCHQUERYMATCH_QUERY 函数是 MATCH 相关性函数的同义词。它们不接受额外参数,但提供了替代语法。

语法

要使用 matchquerymatch_query,请传入您的搜索查询和要搜索的字段名称

match_query(field_expression, query_expression[, option=<option_value>]*)
matchquery(field_expression, query_expression[, option=<option_value>]*)
field_expression = match_query(query_expression[, option=<option_value>]*)
field_expression = matchquery(query_expression[, option=<option_value>]*)

您可以按任意顺序指定以下选项

  • 分析器
  • 提升

示例

您可以使用 MATCHQUERY 来替换 MATCH

SELECT account_number, address
FROM accounts
WHERE MATCHQUERY(address, 'Holmes')

或者,您可以使用 MATCH_QUERY 来替换 MATCH

SELECT account_number, address
FROM accounts
WHERE address = MATCH_QUERY('Holmes')

结果包含地址中包含“Holmes”的文档

account_number address
1 880 Holmes Lane

多字段匹配

有三个 MULTI_MATCH 的同义词,每个的语法略有不同。它们接受一个查询字符串和一个带权重的字段列表。它们也可以接受额外的可选参数。

语法

multimatch('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
multi_match('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
multimatchquery('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)

fields 参数是可选的,可以包含单个字段或逗号分隔的列表(不允许有空白字符)。每个字段的权重是可选的,并在字段名后指定。它应该由 caret 字符(^)分隔,不带空白。

示例

以下查询展示了多字段匹配查询的 fields 参数,其中包含单个字段和字段列表

multi_match('fields' = "Tags^2,Title^3.4,Body,Comments^0.3", ...)
multi_match('fields' = "Title", ...)

您可以按任意顺序指定以下选项

  • 分析器
  • 提升
  • slop
  • type
  • tie_breaker
  • operator

查询字符串

QUERY 函数是 QUERY_STRING 的同义词。

语法

query('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)

fields 参数是可选的,可以包含单个字段或逗号分隔的列表(不允许有空白字符)。每个字段的权重是可选的,并在字段名后指定。它应该由 caret 字符(^)分隔,不带空白。

示例

以下查询展示了多字段匹配查询的 fields 参数,其中包含单个字段和字段列表

query('fields' = "Tags^2,Title^3.4,Body,Comments^0.3", ...)
query('fields' = "Tags", ...)

您可以按任意顺序指定以下选项

  • 分析器
  • 提升
  • slop
  • default_field

在 SQL 和 PPL 查询中使用 query_string 的示例

以下是一个 OpenSearch DSL 中的 REST API 搜索请求示例。

GET accounts/_search
{
  "query": {
    "query_string": {
      "query": "Lane Street",
      "fields": [ "address" ],
    }
  }
}

上述请求等同于以下 query 函数

SELECT account_number, address
FROM accounts
WHERE query('address:Lane OR address:Street')

结果包含地址中包含“Lane”或“Street”的文档

account_number address
1 880 Holmes Lane
6 671 Bristol Street
13 789 Madison Street

匹配短语

MATCHPHRASEQUERY 函数是 MATCH_PHRASE 的同义词。

语法

matchphrasequery(query_expression, field_expression[, option=<option_value>]*)

您可以按任意顺序指定以下选项

  • 分析器
  • 提升
  • slop

评分查询

要返回每个匹配文档的相关性评分,请使用 SCORESCOREQUERYSCORE_QUERY 函数。

语法

SCORE 函数需要两个参数。第一个参数是 MATCH_QUERY 表达式。第二个参数是一个可选的浮点数,用于提升评分(默认值为 1.0)

SCORE(match_query_expression, score)
SCOREQUERY(match_query_expression, score)
SCORE_QUERY(match_query_expression, score)

示例

以下示例使用 SCORE 函数来提升文档的评分

SELECT account_number, address, _score
FROM accounts
WHERE SCORE(MATCH_QUERY(address, 'Lane'), 0.5) OR
  SCORE(MATCH_QUERY(address, 'Street'), 100)
ORDER BY _score

结果包含具有相应评分的匹配项

account_number address score
1 880 Holmes Lane 0.5
6 671 Bristol Street 100
13 789 Madison Street 100

通配符查询

要通过给定通配符搜索文档,请使用 WILDCARDQUERYWILDCARD_QUERY 函数。

语法

wildcardquery(field_expression, query_expression[, boost=<value>])
wildcard_query(field_expression, query_expression[, boost=<value>])

示例

以下示例使用通配符查询

SELECT account_number, address
FROM accounts
WHERE wildcard_query(address, '*Holmes*');

结果包含与通配符表达式匹配的文档

account_number address
1 880 Holmes Lane