据我所知,如果我们在嵌套字段上执行简单(非嵌套)聚合,它会为每个存储桶提供父文档的计数(该嵌套字段是属性的文档)。而不是嵌套文档的计数。
假设: 现在我有以下映射:
{
"properties": {
"openPort":{
"type":"nested",
"include_in_parent":true,
"properties":{
"port":{
"type":"integer"
},
"protocol":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
}
现在我想找到 1.(端口,协议)的所有可能组合。 2.这些组合的总数。 3.每个组合的外部文件数量。
因此,为了达到(1和2),以下没有给出正确的结果:
{
"aggs" : {
"multi_field_cardinality" : {
"cardinality" : {
"script": {
"inline": "doc['openPort.port'].value + '#' + doc['openPort.protocol.keyword'].value"
},
"precision_threshold":4000
}
},
"multi_field_terms" : {
"terms" : {
"script": {
"inline": "doc['openPort.port'].value + '#' + doc['openPort.protocol.keyword'].value"
},
"size":4000
}
}
}
}
不准确之处在于:它不包括(端口,协议)的所有组合。
但是以下嵌套的agg包括所有:
{
"aggs" : {
"count_multi-field":{
"nested":{
"path":"openPort"
},
"aggs":{
"multi_field_cardinality" : {
"cardinality" : {
"script": {
"inline": "doc['openPort.port'].value + '#' + doc['openPort.protocol.keyword'].value"
},
"precision_threshold":4000
}
},
"multi_field_terms" : {
"terms" : {
"script": {
"inline": "doc['openPort.port'].value + '#' + doc['openPort.protocol.keyword'].value"
},
"size":1000
}
}
}
}
}
}
请帮助我理解原因。