通配符查询 #
使用 wildcard
通配符查询来搜索匹配通配符模式的词项。通配符查询支持以下操作符。
操作符 | 描述 |
---|---|
* | 匹配零个或多个字符。 |
? | 匹配任意单个字符。 |
case_insensitive | 若 true 为真,则通配符查询不区分大小写;若 false 为真,则通配符查询区分大小写。默认情况下 false 为真(区分大小写)。 |
若进行区分大小写的搜索,查找以 H
开头且以 Y
结尾的词,可使用以下请求:
GET shakespeare/_search
{
"query": {
"wildcard": {
"speaker": {
"value": "H*Y",
"case_insensitive": false
}
}
}
}
如果你将 *
更改为 ?
,则不会有任何匹配,因为 ?
引用的是一个单一字符。
通配符查询通常速度较慢,因为它们需要遍历大量的词项。避免在查询的开头使用通配符字符,因为这在资源和时间方面都可能是一项非常昂贵的操作。
通配符(wildcard
)字段类型构建了一个特别为通配符和正则表达式查询设计的索引。
参数说明 #
查询接受字段名称( <field>
)作为顶级参数:
GET _search
{
"query": {
"wildcard": {
"<field>": {
"value": "patt*rn",
...
}
}
}
}
<field>
接受以下参数。除了 value
之外,所有参数都是可选的。
参数 | 数据类型 | 描述 |
---|---|---|
value | String | 用于匹配 <field> 中指定字段的词条的通配符模式。 |
boost | Float | 一个浮点数,用于指定该字段对相关性评分的权重。值大于 1.0 会增加字段的相关性。值在 0.0 到 1.0 之间会降低字段的相关性。默认值为 1.0。 |
case_insensitive | Boolean | 如果为 true,则允许不区分大小写地匹配值与索引字段值。默认值为 false (大小写敏感性由字段的映射决定)。 |
rewrite | String | 确定 Easysearch 如何重写和评分多词查询。有效值为 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 ,则不会执行通配符查询。