查询 DSL - bool 内的正则表达式

问题描述 投票:0回答:1

我正在使用 OpenSearch Dashboard 来查找特定日志。我需要使用查询 DSL 过滤它们以获得以下结果:

“sText”:“.*任务开始”或“sText”:“.*任务完成”

我可以使用“查询正则表达式”过滤一个值

{
  "query": {
       "regexp":{
            "sText":".*task finished"
            }
        }
} 

或者使用“应该”来获取 2 个特定值之一:

{
  "query": {
   
        "bool":{
            "should":[
            {
                "match":{
                    "sText":"XYDB task finished"
                }
            },
            {
             "match":{
                  "sText": "XYDB task started"
             }   
            }
            ]
        }
     
    
  }
}

如何组合这些以便我可以在“应该”查询中使用正则表达式?

我尝试过:

{
  "query": {
    
      "bool": {
        "should": [
          {
            "match": {
                "regexp":{
                    "sText": ".*task started"
                }
            }
          },
          {
            "match": {
                "regexp":{
                    "sText": ".*task finished"
                }
            }
          }
        ]
      }
  }
}

还有:

{
  "query": {
    "regexp":
      "bool": {
        "should": [
          {
            "match": {
                {
                    "sTask": ".*task started"
                }
            
          },
          {
            "match": {
                
                    "sTask": ".*task finished"
                }
            
          }
        ]
      }
    }
  }
}

我也尝试使用“通配符”而不是“正则表达式”,但结果是相同的。

querydsl opensearch-dashboards
1个回答
0
投票

所以我终于找到了答案。 问题是我将“match”与“regexp”结合使用,但应该使用“regexp”而不是“match”,因为它会查找精确匹配。

过滤器应如下所示:

 {
  "query": {
    "bool": {
        "should": [
        {
            "regexp":{
                "sText": ".*task started"
                }
        },
        {
            "regexp":{
                "sText": ".*task finished"
            }
        }          
        ]
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.