正则表达式查询
编辑正则表达式查询
编辑返回包含与正则表达式匹配的词项的文档。
正则表达式是一种使用占位符字符(称为运算符)匹配数据模式的方法。有关regexp
查询支持的运算符列表,请参阅正则表达式语法。
示例请求
编辑以下搜索返回user.id
字段包含任何以k
开头,以y
结尾的词项的文档。.*
运算符匹配任何长度的任何字符,包括没有字符。匹配的词项可以包括ky
、kay
和kimchy
。
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,则不会执行正则表达式查询。