当前位置: 首页 > 知识库问答 >
问题:

弹性搜索聚合按桶键排序

谭志用
2023-03-14

我如何对键上的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
                     },
                     ...
                  ]
               }
            },

我希望我的< code >事件聚集桶在关键< code >印象或< code >页面视图上按desc/asc排序。我如何实现这样的结果集?

这是我的查询

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,但它在桶内排序。我想通过查看所有桶来排序。就像我有一个键印象。我希望我的桶结果用这个键排序。不在桶内。

我希望我的结果设置如下:如果我想按降序对< code>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
                         },
                         ...
                      ]
                   }
                },

i、 e最大压痕的铲斗应位于顶部。(按印象降序订购桶)

共有1个答案

闻人河
2023-03-14

尝试此聚合:

{
  "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"
            }
          }
        }
      }
    }
  }
}
 类似资料:
  • 这是我的示例文档,我在kibana的帮助下为类似文档编制索引。 现在在文件中,“体验”下的关键“品牌”是主集团“公司”的子集团。正如您在文档中看到的,“品牌”可能有类似于“其他”的条目,但由“公司”键分隔。类似的结构可以在文档内部和文档之间出现。我打算根据“品牌”和“公司”来汇总文档。我尝试的查询是- 我得到的错误为- 这是我的文档的映射- 我知道我的经验字段没有嵌套,可能是这个错误的原因。我对e

  • 我正在尝试对弹性搜索聚合的结果桶进行排序。我有一大套文件: 我目前正在做的是使用top_hits聚合获取每个的最新销售: 现在,我想按任意字段对生成的bucket进行排序。如果我想按排序,我可以使用这个问题的解决方案,添加一个aggregation,它从每个bucket中提取 字段,最后添加一个 的字母顺序排序,我不能使用< code>max聚合,因为它只对数值字段有效。 如何按文本字段对存储桶(

  • 我需要在其中一个索引中进行聚合排序分页。 我了解了弹性搜索的内部功能, 我总共有5个分片,它会对各个分片进行排序并获取结果,默认情况下每个分片将返回10条记录。然后再次对50条记录进行排序,它将获取前10条记录,因为默认大小为10。 输出: 聚合结果在名为“聚合”的单独字段中返回。为了在此聚合数据中进行分页,size和from不起作用。 厌倦了做termBuilder.size(500),现在逻辑

  • 我已经为一个问题挣扎了一段时间,所以我想我应该通过stackoverflow来解决这个问题。 “我的文档类型”有一个标题、一个语言字段(用于筛选)和一个分组id字段(我省略了所有其他字段以保持重点) 搜索文档时,我希望找到包含标题中文本的所有文档。对于每个唯一的分组id,我只需要一个文档。 我一直在关注tophits聚合,从我所看到的情况来看,它应该能够解决我的问题。 对我的索引运行此查询时: 我

  • 我正在使用聚合来根据其他字段的总和对一个字段进行分组。 它正在工作,但输出与我从数据库查询得到的结果不相似。 ES查询: 输出: "domain_agg":{"doc_count_error_upper_bound": 9,"sum_other_doc_count": 1442,"存储桶": [ { "key":"doc_count","doc_count": 2,"domain_store_co

  • 我知道elasticsearch允许子聚合(即嵌套聚合),但是我想对“第一次”聚合的结果应用聚合(或者在通用的任何查询中-聚合与否)。 具体示例:我记录有关用户操作的事件(为简单起见,我有带有和的文档)。我可以进行查询,计算每个用户执行的操作数量。但是我想找出“活跃用户”的百分比(或计数)(例如,执行了10个以上操作的用户)。理想的结果是所有用户的直方图,显示用户的活跃程度。 有没有办法创建这样的