正则表达式查询编辑

返回包含与 正则表达式 匹配的词条的文档。

正则表达式是一种使用称为运算符的占位符字符匹配数据中模式的方法。有关 regexp 查询支持的运算符列表,请参阅 正则表达式语法

请求示例编辑

以下搜索返回 user.id 字段包含以 k 开头并以 y 结尾的任何词条的文档。 .* 运算符匹配任意长度的任意字符,包括无字符。匹配的词条可以包括 kykaykimchy

resp = client.search(
    body={
        "query": {
            "regexp": {
                "user.id": {
                    "value": "k.*y",
                    "flags": "ALL",
                    "case_insensitive": True,
                    "max_determinized_states": 10000,
                    "rewrite": "constant_score_blended",
                }
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      regexp: {
        'user.id' => {
          value: 'k.*y',
          flags: 'ALL',
          case_insensitive: true,
          max_determinized_states: 10_000,
          rewrite: 'constant_score_blended'
        }
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "regexp": {
      "user.id": {
        "value": "k.*y",
        "flags": "ALL",
        "case_insensitive": true,
        "max_determinized_states": 10000,
        "rewrite": "constant_score_blended"
      }
    }
  }
}

regexp 的顶级参数编辑

<field>
(必填,对象)您希望搜索的字段。

<field> 的参数编辑

value

(必填,字符串)用于在提供的 <field> 中查找的词条的正则表达式。有关支持的运算符列表,请参阅 正则表达式语法

默认情况下,正则表达式限制为 1,000 个字符。您可以使用 index.max_regex_length 设置更改此限制。

regexp 查询的性能可能会因提供的正则表达式而异。为了提高性能,请避免在没有前缀或后缀的情况下使用通配符模式,例如 .*.*?+

flags
(可选,字符串)为正则表达式启用可选运算符。有关有效值和更多信息,请参阅 正则表达式语法
case_insensitive [7.10.0] 添加于 7.10.0。
(可选,布尔值)设置为 true 时,允许正则表达式值与索引字段值进行不区分大小写的匹配。默认值为 false,这意味着匹配的区分大小写取决于底层字段的映射。
max_determinized_states

(可选,整数)查询所需的 自动机状态 的最大数量。默认值为 10000

Elasticsearch 在内部使用 Apache Lucene 来解析正则表达式。Lucene 将每个正则表达式转换为包含多个确定性状态的有限自动机。

您可以使用此参数来防止该转换无意中消耗太多资源。您可能需要增加此限制才能运行复杂的正则表达式。

rewrite
(可选,字符串)用于重写查询的方法。有关有效值和更多信息,请参阅 rewrite 参数

注意编辑

允许高开销查询编辑

如果 search.allow_expensive_queries 设置为 false,则不会执行正则表达式查询。