我使用聚合从嵌套字段中收集数据,并卡住了一点
文档示例:
{
...
rectangle: {
attributes: [
{_id: 'some_id', ...}
]
}
ES允许通过rectangular.attributes._id进行分组数据,但是有什么方法可以使一些“其他”存储区放置未添加到任何分组中的文档?也许有一种方法可以创建查询,以{"rectangle.attributes._id": {$ne: "{currentDoc}.rectangle.attributes._id"}}
为文档创建存储桶
我认为存储桶将是完美的,因为我需要使用“其他”文档进行进一步的汇总。
也许有一些不错的解决方法
我使用这样的查询进行聚合
"aggs": {
"attributes": {
"nested": {
"path": "rectangle.attributes"
},
"aggs": {
"attributesCount": {
"cardinality": {
"field": "rectangle.attributes._id.keyword"
}
},
"entries": {
"terms": {
"field": "rectangle.attributes._id.keyword"
}
}
}
}
}
并获得此结果
"buckets" : [
{
"key" : "some_parent_id",
"doc_count" : 27616,
"attributes" : {
"doc_count" : 45,
"entries" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "some_id",
"doc_count" : 45,
"attributeOptionsCount" : {
"value" : 2
}
}
]
}
}
}
]
这样的结果将是完美的:
"buckets" : [
{
"key" : "some_parent_id",
"doc_count" : 1000,
"attributes" : {
"doc_count" : 145,
"entries" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "some_id",
"doc_count" : 45
},
{
"key" : "other",
"doc_count" : 100
}
]
}
}
}
]
答案 0 :(得分:0)
您可以使用missing值参数。更新聚合如下:
"aggs": {
"attributes": {
"nested": {
"path": "rectangle.attributes"
},
"aggs": {
"attributesCount": {
"cardinality": {
"field": "rectangle.attributes._id.keyword"
}
},
"entries": {
"terms": {
"field": "rectangle.attributes._id.keyword",
"missing": "other"
}
}
}
}
}