正则匹配 regexp
Regexp Query允许您使用正则表达式查询关键词。有关支持的正则表达式语言的详细信息,请参阅正则表达式语法。
caution
注意:正则表达式查询的性能在很大程度上取决于所选的正则表达式。匹配 . 之类的所有内容以及使用正向预查正则表达式都非常慢。如果可能,您应该尝试在正则表达式开始之前使用长前缀。像 .?+ 这样的通配符匹配器大多会降低性能。
GET /_search
{
"query": {
"regexp":{
"name.first": "s.*y"
}
}
}
支持算分
GET /_search
{
"query": {
"regexp":{
"name.first":{
"value":"s.*y",
"boost":1.2
}
}
}
}
您还可以使用特殊标志
GET /_search
{
"query": {
"regexp":{
"name.first": {
"value": "s.*y",
"flags" : "INTERSECTION|COMPLEMENT|EMPTY"
}
}
}
}
支持的的Flag有 ALL(默认)、ANYSTRING、COMPLEMENT、EMPTY、INTERSECTION、INTERVAL 或 NONE。请查看 Lucene 文档了解它们的含义
正则表达式很危险,因为很容易意外地创建一个看起来无害的表达式,它需要指数数量的内部确定自动机状态(以及相应的 RAM 和 CPU)来执行 Lucene。 Lucene 使用 max_determinized_states 设置(默认为 10000)来防止这些。您可以提高此限制以允许执行更复杂的正则表达式。
GET /_search
{
"query": {
"regexp":{
"name.first": {
"value": "s.*y",
"flags" : "INTERSECTION|COMPLEMENT|EMPTY",
"max_determinized_states": 20000
}
}
}
}