过滤字段值或不存在

Posted

技术标签:

【中文标题】过滤字段值或不存在【英文标题】:Filter on field value or not exists 【发布时间】:2021-04-07 19:51:26 【问题描述】:

我正在尝试过滤特定值或它不存在的字段。

我有特定值的部分


  "query": 
    "match": 
      "app.serviceType": 
        "query": "MY_VALUE",
        "type": "phrase"
      
    
  

我还想在字段 serviceType 根本不存在的情况下添加此内容。

基本上我想要这样的:

serviceType == "MY_VALUE" || string.IsNullOrEmpty(serviceType)

【问题讨论】:

你看到这个回复了吗:***.com/questions/56590057/… @YLR 不,我的搜索中没有出现该结果。 【参考方案1】:

此请求必须与您的用例匹配:

 
  "query": 
    "bool": 
      "should": [
        
          "bool": 
            "must": [
              
                "exists": 
                  "field": "serviceType"
                
              ,
              
                "match_phrase": 
                    "serviceType": "MY_VALUE"
                
              
            ]
          
        ,
        
          "bool": 
            "must_not": [
              
                "exists": 
                  "field": "serviceType"
                
              
            ]
          
        
      ]
    
  

【讨论】:

这没有用,但它确实让我很接近。我不得不将查询开头的第一个must 更改为should【参考方案2】:

根据之前的答案(没有用但让我很接近),我能够让它工作。


  "query": 
    "bool": 
      "should": [
        
          "bool": 
            "must": [
              
                "exists": 
                  "field": "app.serviceType"
                
              ,
              
                "match_phrase": 
                  "app.serviceType": "MY_VALUE"
                
              
            ]
          
        ,
        
          "bool": 
            "must_not": [
              
                "exists": 
                  "field": "app.serviceType"
                
              
            ]
          
        
      ]
    
  

【讨论】:

以上是关于过滤字段值或不存在的主要内容,如果未能解决你的问题,请参考以下文章

将布尔字段查询为“不正确”(例如,错误或不存在)

如果存在,则在 mongodb 中增加嵌套字段值或创建嵌套字段

如果存在,则在 mongodb 中增加嵌套字段值或创建嵌套字段

查找字段存在的所有文档:在 Elasticsearch 中它有一个值或为空

访问报告条件或不工作

如何过滤掉弹性搜索中不存在的字段?