术语以嵌套顺序聚合

时间:2018-09-02 16:24:16

标签: elasticsearch

我们正在尝试基于两个关键字字段生成汇总。

这是我们关心的领域:

  • document_type :从我们所有的文档中识别出我们想要的文档子集。
  • document_subtype 标识文档的子类型。

在映射中,它们位于根目录级别

{
   "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
            }
        }
    ]
}

我的问题如下:

  1. 是否有解决此异常的方法?
  2. 如果没有办法解决这个问题,那么根据子文档数量生成此有序术语聚合的一种好方法是什么?

谢谢

0 个答案:

没有答案
相关问题