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

时间:2015-09-17 23:15:13

标签: javascript elasticsearch

我在过滤器格式中有以下弹性搜索查询,工作正常。但是,我想将其转换为查询格式而不是过滤器。有人可以帮帮我吗。 "定时"是嵌套的。

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以获取timings.packages实际包含值的文档,而不是在notmissing timings.packages的情况下提取文档。

使用range查询可以实现这样的正值:

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

<强>更新

我将离开上述查询,因为它可能会帮助人们在数组中使用数字。对数字和字符串都有效的另一种方法是通过script filter检查数组的长度,如下所示:

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