sorting - elasticsearch 聚合对存储桶键进行排序

标签 sorting elasticsearch aggregation bucket-sort

我如何对键上的 Elasticsearch 聚合存储桶进行排序。我有嵌套聚合,想对我的第二个聚合桶结果进行排序。

就像我有:

"result": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": 20309,
               "doc_count": 752,
               "Events": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "impression",
                        "doc_count": 30
                     },
                     {
                        "key": "page_view",
                        "doc_count": 10
                     },
                     ...
                  ]
               }
            },
            {
               "key": 20771,
               "doc_count": 46,
               "Events": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "impression",
                        "doc_count": 32
                     },
                     {
                        "key": "page_view",
                        "doc_count": 9
                     },
                     ...
                  ]
               }
            },

我想要我的 Events聚合桶以按键上的 desc/asc 排序 impressionpage_view .
我如何实现这样的结果集?

这是我的查询
GET someindex/useractivity/_search?search_type=count
{
  "size": 1000000,
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "created_on": {
                  "from": "2015-01-12",
                  "to": "2016-05-12"
                }
              }
            },
            {
              "term": {
                "group_id": 1
              }
            }
          ]
        }
      }
    }
  },
  "aggs": {
    "result": {
      "terms": {
        "field": "entity_id",
        "size": 1000000
      },
      "aggs": {
        "Events": {
          "terms": {
            "field": "event_type",
            "min_doc_count": 0,
            "size": 10
          }
        }
      }
    }
  }
}

我曾尝试使用 _key,但它在存储桶中排序。我想通过查看所有存储桶进行排序。就像我有 key impression .我希望我的存储桶结果使用此键进行排序。不在桶内。

如果我想对 impression 进行排序,我希望我的结果集是这样的按降序排列,那么我的结果应该是
"buckets": [
                {
                   "key": 20771,
                   "doc_count": 46,
                   "Events": {
                      "doc_count_error_upper_bound": 0,
                      "sum_other_doc_count": 0,
                      "buckets": [
                         {
                            "key": "impression",
                            "doc_count": 32
                         },
                         {
                            "key": "page_view",
                            "doc_count": 9
                         },
                         ...
                      ]
                   }
                },
                {                       
                   "key": 20309,
                   "doc_count": 752,
                   "Events": {
                      "doc_count_error_upper_bound": 0,
                      "sum_other_doc_count": 0,
                      "buckets": [
                         {
                            "key": "impression",
                            "doc_count": 30
                         },
                         {
                            "key": "page_view",
                            "doc_count": 10
                         },
                         ...
                      ]
                   }
                },

即最大印象的桶应该在顶部。 (按展示次数降序排列存储桶)

最佳答案

试试这个聚合:

{
  "size": 0,
  "aggs": {
    "result": {
      "terms": {
        "field": "entity_id",
        "size": 10,
        "order": {
          "impression_Events": "desc"
        }
      },
      "aggs": {
        "Events": {
          "terms": {
            "field": "event_type",
            "min_doc_count": 0,
            "size": 10
          }
        },
        "impression_Events": {
          "filter": {
            "term": {
              "event_type": "impression"
            }
          }
        }
      }
    }
  }
}

关于sorting - elasticsearch 聚合对存储桶键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186008/

相关文章:

python - 高效的一维数组比较、缩放和求和

solr - 如何标记由两个没有空格的单词组合而成的单词

r - 按时钟时间聚合一个带时间戳的动物园对象(即不仅仅按动物园对象中的时间)

java - 如何从 Spring data MongoDB 中的 AggregationOperation 列表创建聚合?

elasticsearch - 查询〜10M文档索引和更多问题时,fielddata = true会产生什么影响

java - 如何将大文本文件排序为多维数组?

reactjs - 通过单击列标题对表格进行排序

linux - Sort numbers values - separated by a dot or any other separator character - 在 RHEL5 中排序版本值

elasticsearch - es中一个query中的多个搜索条件,并根据条件区分items

Elasticsearch 复制其他系统数据?