【问题标题】:Check root element FIELD for existence in ElasticSearch检查 ElasticSearch 中是否存在根元素 FIELD
【发布时间】:2016-02-10 21:23:10
【问题描述】:

我在检查根 (_source) 字段是否存在时遇到问题。 简而言之,问题是我在_source 中有一个对象,它可能也有这个字段,ES 返回两者的命中(_source 中存在字段,_source.myobject 中存在字段)

想象一个看起来像这样的文档:

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

    "foo": 1,

    "myobject": {

      "foo": 1,

      "bar": 1
    }
  }
}

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

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

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

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

自己测试一下:

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

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

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

非常感谢

【问题讨论】:

  • myobject 的type 是什么?是嵌套的吗?
  • 说实话,不确定(抱歉我们的基础设施很大)_mapping 说它是一个带有其他属性的属性,所以我怀疑它只是一个对象
  • 您的查询在 ES 1.7 和 ES 2.0 上对我来说运行良好,它确实返回文档
  • 只检查 1.7 并且查询不起作用(返回不应该的结果)。基本上我的过滤器在过滤“栏”字段时返回文档
  • 好的,这已在 2.2.0 中修复(可能更早,但 1.7.0 仍然存在问题,而 2.2.0 没有)

标签: elasticsearch


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多