Regexp 查询
使用 regexp
查询来搜索与正则表达式匹配的词条。有关编写正则表达式的更多信息,请参阅正则表达式语法。
以下查询搜索以任意大写或小写字母开头,后跟 amlet
的任意词条
GET shakespeare/_search
{
"query": {
"regexp": {
"play_name": "[a-zA-Z]amlet"
}
}
}
请注意以下重要事项:
- 正则表达式应用于字段中的词条(即标记),而不是整个字段。
- 默认情况下,正则表达式的最大长度为 1,000 个字符。要更改最大长度,请更新
index.max_regex_length
设置。 - 正则表达式使用 Lucene 语法,这与更标准化的实现不同。请彻底测试以确保获得预期的结果。要了解更多信息,请参阅Lucene 文档。
- 为了提高 regexp 查询性能,请避免使用没有前缀或后缀的通配符模式,例如
.*
或.*?+
。 regexp
查询可能是开销很大的操作,需要将search.allow_expensive_queries
设置为true
。在频繁执行regexp
查询之前,请测试它们对集群性能的影响,并检查可能实现类似结果的替代查询。- 通配符字段类型构建了一个专门为通配符和正则表达式查询设计的高效索引。
参数
查询接受字段名称 (<field>
) 作为顶级参数
GET _search
{
"query": {
"regexp": {
"<field>": {
"value": "[Ss]ample",
...
}
}
}
}
<field>
接受以下参数。除 value
外,所有参数都是可选的。
参数 | 数据类型 | 描述 |
---|---|---|
值 (value) | 字符串 | 用于匹配 <field> 中指定字段词条的正则表达式。 |
提升 | 浮点型 (Floating-point) | 一个浮点值,指定此字段对相关性得分的权重。高于 1.0 的值会增加字段的相关性。介于 0.0 和 1.0 之间的值会降低字段的相关性。默认值为 1.0。 |
不区分大小写 (case_insensitive) | 布尔型 | 如果为 true ,则允许正则表达式值与索引字段值进行不区分大小写的匹配。默认为 false (大小写敏感性由字段的映射决定)。 |
标志 (flags) | 字符串 | 启用 Lucene 正则表达式引擎的可选运算符。有关有效值,请参阅可选运算符。 |
最大确定化状态 (max_determinized_states) | 整数 | Lucene 将正则表达式转换为具有多个确定化状态的自动机。此参数指定查询所需的最大自动机状态数。使用此参数可防止高资源消耗。要运行复杂的正则表达式,您可能需要增加此参数的值。默认值为 10,000。 |
重写 (rewrite) | 字符串 | 确定 OpenSearch 如何重写和评分多词条查询。有效值包括 constant_score 、scoring_boolean 、constant_score_boolean 、top_terms_N 、top_terms_boost_N 和 top_terms_blended_freqs_N 。默认为 constant_score 。 |
如果 search.allow_expensive_queries
设置为 false
,则不执行 regexp
查询。