通配符查询
使用通配符查询来搜索匹配通配符模式的词项。通配符查询支持以下运算符。
| 运算符 | 描述 |
|---|---|
* | 匹配零个或多个字符。 |
? | 匹配任何单个字符。 |
不区分大小写 (case_insensitive) | 如果为 true,则通配符查询不区分大小写。如果为 false,则通配符查询区分大小写。默认值为 false(区分大小写)。 |
对于区分大小写的搜索,要查找以 H 开头并以 Y 结尾的词项,请使用以下请求
GET shakespeare/_search
{
"query": {
"wildcard": {
"speaker": {
"value": "H*Y",
"case_insensitive": false
}
}
}
}
如果您将 * 更改为 ?,则不会得到任何匹配项,因为 ? 指的是单个字符。
通配符查询通常很慢,因为它们需要遍历大量词项。避免在查询开头放置通配符,因为它在资源和时间方面都可能是一个非常昂贵的操作。
通配符字段类型 会构建一个索引,该索引经过专门设计,对通配符和正则表达式查询非常高效。
参数
查询接受字段名称 (<field>) 作为顶级参数
GET _search
{
"query": {
"wildcard": {
"<field>": {
"value": "patt*rn",
...
}
}
}
}
<field> 接受以下参数。除 value 外,所有参数都是可选的。
| 参数 | 数据类型 | 描述 |
|---|---|---|
值 | 字符串 | 用于匹配 <field> 中指定字段的词项的通配符模式。 |
提升 | 浮点 | 一个浮点值,指定此字段对相关性得分的权重。高于 1.0 的值会增加字段的相关性。介于 0.0 和 1.0 之间的值会降低字段的相关性。默认值为 1.0。 |
不区分大小写 (case_insensitive) | 布尔型 | 如果为 true,则允许值与索引字段值进行不区分大小写的匹配。默认值为 false(大小写敏感性由字段的映射决定)。 |
重写 (rewrite) | 字符串 | 确定 OpenSearch 如何重写和评分多词项查询。有效值为 constant_score、scoring_boolean、constant_score_boolean、top_terms_N、top_terms_boost_N 和 top_terms_blended_freqs_N。默认值为 constant_score。 |
如果 search.allow_expensive_queries 设置为 false,则不执行通配符查询。