检查ElasticSearch

时间:2016-02-10 21:23:11

标签: elasticsearch

我无法检查root(_source)字段是否存在。 问题很简单,我在_source中有一个对象,也可能有这个字段,ES返回两者的匹配(_source中存在字段,_source.myobject中存在字段)< / p>

想象一下如下文档:

{
  "_index": "someIndex",
  "_type": "someType",
  "_id": "someId",
  "_score": 1,
  "_source": {

    "foo": 1,

    "myobject": {

      "foo": 1,

      "bar": 1
    }
  }
}

在理想情况下,我想在检查bar是否存在时 NOT 返回此文档。

但我的简单过滤器会返回此文档:

{
  "filter": {
    "exists": {
      "field": "bar"
    }
  }
}

那么,是否可以通过与访问myobject的字段("field": "myobject.bar")类似的语法来访问根字段键。

自己测试一下:

POST /test-index/foo
{
    "bar": ["1", "2"],
    "myobject": {
        "baz": ["1", "2"]
    }
}

POST /test-index/foo/_search
{
    "filter": {
        "exists": {
           "field": "baz"
        }
    }
}

上面的查询正在返回文档,我想要一个没有的过滤器。

非常感谢

1 个答案:

答案 0 :(得分:0)

此行为似乎在更高版本的ES中得到修复。 1.6.0和1.7.0有这个问题,当试用2.2.0它按预期工作。