【发布时间】: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