【问题标题】:How can i sort aggregations buckets by metric results?如何按指标结果对聚合存储桶进行排序?
【发布时间】:2016-06-29 03:09:06
【问题描述】:

基于official document,似乎只能对单桶聚合进行排序。 如何按桶聚合数中的“平均”对结果进行排序?

我在 'result_1' 中添加了 'order' 仍然无法正常工作。 它显示以下错误:

TransportError(500, u'search_phase_execution_exception')
Invalid terms aggregation order path [reverse>condi_range>statistic_score.avg]. 
Terms buckets can only be sorted on a sub-aggregator path that is built out of zero or more single-bucket aggregations within the path and a final single-bucket or a metrics aggregation at the path end. 
Sub-path [reverse>condi_range] points to non single-bucket aggregation')

关键是我必须限制“float_field”的范围,而range aggregation 是另一个桶聚合。

有人知道吗?

谢谢!

代码示例:

{
  "aggs": {
    "condi_nested": {
      "aggs": {
        "filtered": {
          "filter": {
            "bool": {}
          },
          "aggs": {
            "result_1": {
              "terms": {
                "field": "Foo",
                "size": 100000000,
                "order": {
                  "reverse>condi_range>statistic_score.avg": "desc"
                }
              },
              "aggs": {
                "reverse": {
                  "aggs": {
                    "condi_range": {
                      "range": {
                        "ranges": [
                          {
                            "to": 100,
                            "from": 0
                          }
                        ],
                        "field": "float_field"
                      },
                      "aggs": {
                        "percentile_score": {
                          "percentiles": {
                            "field": "float_field"
                          }
                        },
                        "statistic_score": {
                          "extended_stats": {
                            "field": "float_field"
                          }
                        }
                      }
                    }
                  },
                  "reverse_nested": {}
                }
              }
            }
          }
        }
      },
      "nested": {
        "path": "nested_path_of_Foo"
      }
    }
  }
}

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation


    【解决方案1】:

    我只是想出问题出在哪里。

    使用“过滤器”替换“范围”

    {
      "aggs": {
        "condi_range": {
          "filter": {
            "range": {
              "float_field": {
                "gte": 0,
                "lte": 100
              }
            }
          },
          "aggs":{
            ...blahblahblah...
          }
        }
      }
    }
    

    但是在我问的问题之后我发现了另一个问题。

    嵌套聚合后我无法对字段进行排序,引发问题中发布的相同错误。

    示例如下:

    {
      "aggs": {
        "result_1": {
          "terms": {
            "field": "Foo",
            "order": {
              "condi_nested>filtered>condi_range>statistic_score.min": "desc"
            },
            "size": 100000000
          },
          "aggs": {
            "condi_nested": {
              "aggs": {
                "filtered": {
                  "filter": {
                    "bool": {}
                  },
                  "aggs": {
                    "condi_range": {
                      "filter": {
                        "range": {
                          "nested_path_of_float_field.float_field": {
                            "gte": 0,
                            "lte": 100
                          }
                        }
                      },
                      "aggs": {
                        "statistic_score": {
                          "extended_stats": {
                            "field": "nested_path_of_float_field.float_field"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "nested": {
                "path": "nested_path_of_float_field"
              }
            }
          }
        }
      }
    }
    

    还有这个

    {
      "aggs": {
        "condi_nested": {
          "aggs": {
            "filtered": {
              "filter": {
                "bool": {}
              },
              "aggs": {
                "result_1": {
                  "terms": {
                    "field": "Foo",
                    "order": {
                      "reverse>condi_nested>condi_range>statistic_score.min": "desc"
                    },
                    "size": 100000000
                  },
                  "aggs": {
                    "reverse": {
                      "aggs": {
                        "condi_nested": {
                          "aggs": {
                            "condi_range": {
                              "filter": {
                                "range": {
                                  "nested_path_of_float_field.float_field": {
                                    "gte": 0,
                                    "lte": 100
                                  }
                                }
                              },
                              "aggs": {
                                "percentile_score": {
                                  "percentiles": {
                                    "field": "nested_path_of_float_field.float_field"
                                  }
                                },
                                "statistic_score": {
                                  "extended_stats": {
                                    "field": "nested_path_of_float_field.float_field"
                                  }
                                }
                              }
                            }
                          },
                          "nested": {
                            "path": "nested_path_of_float_field"
                          }
                        }
                      },
                      "reverse_nested": {}
                    }
                  }
                }
              }
            }
          },
          "nested": {
            "path": "nested_path_of_Foo"
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 2016-09-08
      • 2019-01-27
      • 2019-09-15
      • 2023-01-10
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多