嵌套数组之一
具有 一个 符合某些条件的嵌套数组 之一
非常简单。甲嵌套滤波器的计算结果为匹配/真,如果任何嵌套对象的阵列的匹配指定内的过滤器。例如,给定一个
outer对象数组,其中那些对象中的一个对象具有一个
match值为
"matching"的字段,则将以下内容视为正确。
"nested": { "path": "outer", "filter": { "term" : { "match" : "matching" } }}如果 其中一个 嵌套
outer对象具有一个名为
matchvalue 的字段,则以上内容将被视为true / matching
"matching"。
所有嵌套数组
仅当数组匹配的 所有
嵌套对象更有趣时,才具有嵌套过滤器。实际上,这是不可能的。但是考虑到如果只有一个嵌套对象与一个过滤器匹配,则认为是匹配的,我们可以颠倒逻辑并说“如果
没有 一个嵌套对象 不
匹配”以达到我们所需要的。例如,给定一个嵌套
outer.inner对象数组,其中所有这些对象都具有一个
match值为
"matching"的字段,则以下内容将被视为true。
"not" : { "nested": { "path": "outer.inner", "filter": { "not" : { "term" : { "match" : "matching" }} } }}上述将被视为真/匹配,因为 没有 嵌套的
outer.inner对象 不
(双阴性)有一个称为字段
match具有值
"matching"。当然,这与 所有
inner具有
matchvalue
字段的嵌套对象相同
"matching"。
缺少任何嵌套对象
使用传统的缺失过滤器无法检查是否缺少包含嵌套对象的字段。这是因为,嵌套的对象实际上并没有 在
所有的文件,将它们存储在别处。因此,丢失的过滤器将始终被视为正确。但是,您可以做的是检查
match_all过滤器是否不返回任何结果。
"not": { "nested": { "path": "outer", "filter": { "match_all": {} } } }如果未
match_all找到结果,则认为是正确/匹配。



