我想运行一个查询来查看有多少文档将空对象存储为其值。例如,它将返回如下文档:
override func viewWillAppear() {
let mc = MenuController()
mc.enableEditingMenu( enabled: true )
}
override func viewWillDisappear() {
let mc = MenuController()
mc.enableEditingMenu( enabled: false )
}
但是没有字段/具有未定义值的字段,或者包含属性的字段的字段:
"hits": [
{
"_source": {
"otherfield": "abc",
"somefield": {}
}
}
]
但是我的查询也将返回文档,其中字段是具有"hits": [
{
"_source": {
"otherfield": "abc",
// <-- note no "somefield"
}
},
{
"_source": {
"otherfield": "abc",
"somefield": { "field1": "value1" }
}
}
]
"somefield": { "field1": "value1" }
使用Elasticsearch 5.4
答案 0 :(得分:0)
以下查询应足以查找包含空somefield
字段的所有文档:
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "somefield"
}
}
}
}
}
虽然您的查询对我来说有点混乱。首先,您要查找不存在somefield.field1
的任何文档。然后,将must_not
子句的内容与使用非空should
过滤文档的somefield
子句的互斥内容组合在一起。实际上should
子句被翻译成
"should": [{
"exists": {"field": "somefield.field1"}
}]
因此,您的查询既不应与somefield: {}
的文档匹配,也不应与somefield: {field1: value1}
的文档匹配。