正则查询 #
使用 regexp
正则查询来搜索符合正则表达式的词项。有关编写正则表达式的更多信息,请参见正则表达式语法。
以下查询搜索以任何大写或小写字母开头的任何词项 amlet
:
GET shakespeare/_search
{
"query": {
"regexp": {
"play_name": "[a-zA-Z]amlet"
}
}
}
请注意以下重要事项:
- 正则表达式应用于字段中的词条(即,标记/token),而不是整个字段。
- 默认情况下,正则表达式的最大长度为 1,000 个字符。要更改最大长度,请更新
index.max_regex_length
设置。 - 正则表达式使用 Lucene 语法,这与更标准的实现有所不同。请充分测试以确保获得预期的结果。要了解更多信息,请参阅 Lucene 文档。
- 为了提高正则表达式查询的性能,避免使用没有前缀或后缀的通配符模式,例如
.*
或.*?+
。 regexp
查询可能会非常耗时,并且需要将search.allow_expensive_queries
设置为true
。在频繁执行regexp
查询之前,请测试其对集群性能的影响,并考虑使用其他可能达到类似效果的查询。- 通配符字段类型构建了一个特别为通配符和正则表达式查询设计的索引。
参数说明 #
查询接受字段名称( <field>
)作为顶级参数:
GET _search
{
"query": {
"regexp": {
"<field>": {
"value": "[Ss]ample",
...
}
}
}
}
<field>
接受以下参数。除了 value
之外,所有参数都是可选的。
参数 | 数据类型 | 描述 |
---|---|---|
value | String | 用于匹配指定在 <field> 字段中的项的正则表达式。 |
boost | Float | 一个浮点数,用于指定该字段对相关性评分的权重。值大于 1.0 会增加字段的相关性。值在 0.0 到 1.0 之间会降低字段的相关性。默认值为 1.0。 |
case_insensitive | Boolean | 如果 true ,则允许对正则表达式值与索引字段值进行不区分大小写的匹配。默认值为 false (大小写敏感性由字段的映射决定)。 |
flags | String | 启用 Lucene 正则表达式引擎的可选操作符。有效值请参见可选操作符。 |
max_determinized_states | Integer | Lucene 将正则表达式转换为具有多个确定状态的自动机。此参数指定查询所需的自动机状态的最大数量。使用此参数以防止资源消耗过高。要运行复杂的正则表达式,您可能需要增加此参数的值。默认值为 10,000。 |
rewrite | String | 确定 Easysearch 如何重写和评分多词查询。有效值为 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 查询将不被执行。