正则表达式查询

编辑

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

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

示例请求

编辑

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

resp = client.search(
    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
const response = await client.search({
  query: {
    regexp: {
      "user.id": {
        value: "k.*y",
        flags: "ALL",
        case_insensitive: true,
        max_determinized_states: 10000,
        rewrite: "constant_score_blended",
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "regexp": {
      "user.id": {
        "value": "k.*y",
        "flags": "ALL",
        "case_insensitive": true,
        "max_determinized_states": 10000,
        "rewrite": "constant_score_blended"
      }
    }
  }
}

regexp的顶层参数

编辑
<字段>
(必需,对象)您希望搜索的字段。

<字段>的参数

编辑
value

(必需,字符串)您希望在提供的<字段>中查找的词项的正则表达式。有关支持的运算符列表,请参阅正则表达式语法

默认情况下,正则表达式限制为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,则不会执行正则表达式查询。