繁体   English   中英

ElasticSearch 如何将非嵌套过滤器转换为查询

[英]ElasticSearch how to convert not nested filter to query

我有以下过滤器格式的弹性搜索查询,它工作正常。 但是,我想将其转换为查询格式而不是过滤器。 任何人都可以请帮助我。 “时间”是嵌套的。

{
  "not": {
    "nested": {
      "path": "timings",
      "query": {
        "filtered": {
          "filter": {
            "missing": {
              "field": "timings.packages"
            }
          }
        }
      }
    }
  }
}

我的数据有时包是空的。 我想过滤掉包为空的记录。

timings{
  packages:[]
}
timings{
 packages:["2","4","6"]
}

您可以获取timings.packages实际包含值的文档,而不是获取timings.packages not missing文档。

这可以通过采用如下正值的range查询来实现:

{
  "query": {
    "nested": {
      "path": "timings",
      "query": {
        "filtered": {
          "filter": {
            "range": {
              "timings.packages": {
                "gt": 0
              }
            }
          }
        }
      }
    }
  }
}

更新

我要离开上面的查询,因为它可能会对数组中的数字有所帮助。 另一种对数字和字符串都适用的方法是通过script过滤器检查数组的长度,如下所示:

{
  "query": {
    "nested": {
      "path": "timings",
      "query": {
        "filtered": {
          "filter": {
            "script": {
              "script": "doc['timings.packages'].size() > 0"
            }
          }
        }
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM