原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-regexp-query.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/query-dsl-regexp-query.html

正则表达式查询 (regexp query)

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

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

请求示例

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

GET /_search
{
    "query": {
        "regexp": {
            "user": {
                "value": "k.*y",
                "flags" : "ALL",
                "max_determinized_states": 10000,
                "rewrite": "constant_score"
            }
        }
    }
}

regexp的顶级参数

<field>
(必需, object) 你想搜索的字段。

<field>的参数

value

(必需, string) 要在指定的<field>中查找的词项的正则表达式。 支持的运算符列表,请参考正则表达式语法

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

regexp查询的性能会因给定的正则表达式而不同。 要提高查询性能,应避免使用通配符模式,如.*或者.*?+,没有前缀或后缀。

flags
(可选, string) 为正则表达式启用可选的运算符。有效值及更多信息请参考正则表达式语法
max_determinized_states

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

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

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

rewrite
(可选, string) 用于重写查询的方法。有效值及更多信息请参考 rewrite参数

注意

允许执行昂贵的查询

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