我们正在尝试基于两个关键字字段生成汇总。
这是我们关心的领域:
在映射中,它们位于根目录级别
{
"document_type": "blog"
"document_subtype": "post"
}
我们所希望的结果非常简单,因为我们只需要生成document_type,并且将document_subtype的计数嵌套嵌套即可,如下所示:
"aggs": {
"agg_terms_document_type": {
"terms": {
"size": 1,
"field": "document_type"
},
"aggs": {
"agg_filter_document_subtypes" : {
"terms" : { "field": "document_subtype"}
}
}
}
}
现在这是有趣的部分,如果我们想按特定的子类型排序,那我们假设文档子类型是“ post”。
我们无法在该查询中使用订单运算符,因为嵌套查询确实会返回存储桶。因此我们修改了查询,因为我们只关心两种类型的document_subtypes: post 和 comment 。看起来像这样:
"aggs": {
"agg_terms_document_type": {
"terms": {
"size": 5,
"field": "document_type",
"order": {"agg_filter_post>agg_post_count": "desc"}
},
"aggs": {
"agg_filter_comment" : {
"filter" : { "term" : { "document_subtype" : "comment" }},
"aggs": {
"agg_comment_count":{
"value_count" : { "field" : "document_subtype" }
}
}
}
"agg_filter_post" : {
"filter" : { "term" : { "document_subtype" : "post" }},
"aggs": {
"agg_post_count":{
"value_count" : { "field" : "document_subtype" }
}
}
}
}
}
}
这将返回正确的结果和正确的顺序,除非您的查询或过滤器聚合的碎片不返回任何文档。在那种情况下,我们得到的文档计数是错误的,因为该分片会失败并出现异常。
"_shards": {
"total": 10,
"successful": 9,
"failed": 1,
"failures": [
{
"shard": 8,
"index": "document_to_search",
"node": "dMNUrtcyR1-nQamcjtJ3vA",
"reason": {
"type": "array_index_out_of_bounds_exception",
"reason": null
}
}
]
}
我的问题如下:
谢谢