我有一个带有以下映射的elasticsearch索引:
{
"properties":{
"asset":{
"properties":{
"customerId":{
"type":"long"
}
}
},
"software":{
"type": "nested",
"properties":{
"id":{
"type":"long"
},
... (more properties)
}
}
}
可能有些文档包含"software":null
当对软件属性(例如id)执行嵌套的过滤器聚合时,过滤器聚合中的doc_count也包括那些为空的软件。
聚合如下所示:
"aggregations": {
"aggs": {
"nested": {
"path": "software"
},
"aggregations": {
"filtered": {
"filter": {
"term": {
"software.type": {
"value": "Application",
"boost": 1.0
}
}
},
"aggregations": {
"software_ids": {
"terms": {
"field": "software.id",
"min_doc_count": 1,
"shard_min_doc_count": 0
}
}
}
}
}
}
}
响应部分:
"aggregations": {
"aggs": {
"doc_count": 129958,
"filtered": {
**"doc_count": 7094,**
此doc_count包含“软件”:空 有没有办法排除它们?
编辑:我已经考虑过将“ missing”参数用于内部术语集合(即用于过滤器集合内部的集合)。但是想知道是否有办法从聚合中完全排除这种“嵌套”空值。
答案 0 :(得分:1)
Missing属性用于救援。
使用Missing属性,可以指定如果缺少该字段,该字段应采用什么值。您可以将值指定为“ JUNK”,然后文档将在聚合中的JUNK存储桶中降落。
以下应立即执行。
"aggregations": {
"aggs": {
"nested": {
"path": "software"
},
"aggregations": {
"filtered": {
"filter": {
"term": {
"software.type": {
"value": "Application",
"boost": 1.0
}
}
},
"aggregations": {
"software_ids": {
"terms": {
"field": "software.id",
"min_doc_count": 1,
"shard_min_doc_count": 0,
"missing": "JUNK"
}
}
}
}
}
}
}