通配符查询

通配符查询 #

使用 wildcard 通配符查询来搜索匹配通配符模式的词项。通配符查询支持以下操作符。

操作符描述
*匹配零个或多个字符。
?匹配任意单个字符。
case_insensitivetrue 为真,则通配符查询不区分大小写;若 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 之外,所有参数都是可选的。

参数数据类型描述
valueString用于匹配 <field> 中指定字段的词条的通配符模式。
boostFloat一个浮点数,用于指定该字段对相关性评分的权重。值大于 1.0 会增加字段的相关性。值在 0.0 到 1.0 之间会降低字段的相关性。默认值为 1.0。
case_insensitiveBoolean如果为 true,则允许不区分大小写地匹配值与索引字段值。默认值为 false (大小写敏感性由字段的映射决定)。
rewriteString确定 Easysearch 如何重写和评分多词查询。有效值为 constant_scorescoring_booleanconstant_score_booleantop_terms_Ntop_terms_boost_Ntop_terms_blended_freqs_N 。默认值为 constant_score

如果 search.allow_expensive_queries 设置为 false ,则不会执行通配符查询。