函数
SQL 语言支持所有 SQL 插件常用函数,包括相关性搜索,同时也引入了一些仅限在 SQL 中使用的函数同义词。
这些同义词由 V1 引擎提供。更多信息,请参阅限制。
匹配查询
MATCHQUERY 和 MATCH_QUERY 函数是 MATCH 相关性函数的同义词。它们不接受额外参数,但提供了一种替代语法。
语法
要使用 matchquery 或 match_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>]*)
您可以按任意顺序指定以下选项:
analyzerboost
示例
您可以使用 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 参数是可选的,可以包含单个字段或逗号分隔的列表(不允许有空格字符)。每个字段的权重也是可选的,在字段名后指定,由脱字符 ^ 分隔,中间不能有空格。
示例
以下查询展示了带单个字段和字段列表的多字段匹配查询的 fields 参数:
multi_match('fields' = "Tags^2,Title^3.4,Body,Comments^0.3", ...)
multi_match('fields' = "Title", ...)
您可以按任意顺序指定以下选项:
analyzerboostsloptypetie_breakeroperator
查询字符串
QUERY 函数是 QUERY_STRING 的同义词。
语法
query('query'=query_expression[, 'fields'=field_expression][, option=<option_value>]*)
fields 参数是可选的,可以包含单个字段或逗号分隔的列表(不允许有空格字符)。每个字段的权重也是可选的,在字段名后指定,由脱字符 ^ 分隔,中间不能有空格。
示例
以下查询展示了多字段匹配查询中带单个字段和字段列表的 fields 参数:
query('fields' = "Tags^2,Title^3.4,Body,Comments^0.3", ...)
query('fields' = "Tags", ...)
您可以按任意顺序指定以下选项:
analyzerboostslopdefault_field
在 SQL 和 PPL 查询中使用 query_string 的示例:
以下是 UDB-SX 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>]*)
您可以按任意顺序指定以下选项:
analyzerboostslop
评分查询
要返回每个匹配文档的相关性评分,请使用 SCORE、SCOREQUERY 或 SCORE_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.6019864 |
| 6 | 671 Bristol Street | 69.31472 |
| 13 | 789 Madison Street | 69.31472 |
通配符查询
要按给定通配符搜索文档,请使用 WILDCARDQUERY 或 WILDCARD_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, '*880*');
结果包含匹配通配符表达式的文档:
| account_number | address |
|---|---|
| 1 | 880 Holmes Lane |