elasticsearch 按字段值对文档进行分组,elasticsearch,group-by,elasticsearch,Group By" /> elasticsearch 按字段值对文档进行分组,elasticsearch,group-by,elasticsearch,Group By" />

elasticsearch 按字段值对文档进行分组

elasticsearch 按字段值对文档进行分组,elasticsearch,group-by,elasticsearch,Group By,注意这不是“如何获得不同值的计数”问题。我要的是文件,不是计数 假设我有这个映射: country, color, height, weight 我为这些文件编制了索引: 1. RU, red, 180, 90 2. BY, green, 170, 80 3. BY, blue, 180, 75 4. KZ, blue, 180, 95 5. KZ, red, 185, 100 6. KZ, red, 175, 80 7. KZ, red, 170, 80 我想执行一个查询,如groupby

注意这不是“如何获得不同值的计数”问题。我要的是文件,不是计数

假设我有这个映射:

country, color, height, weight
我为这些文件编制了索引:

1. RU, red, 180, 90
2. BY, green, 170, 80
3. BY, blue, 180, 75
4. KZ, blue, 180, 95
5. KZ, red, 185, 100
6. KZ, red, 175, 80
7. KZ, red, 170, 80
我想执行一个查询,如
groupby(country,color,doc\u limit=2)
,它将返回如下内容:

{
  "RU": {
    "red": [
      (doc 1. RU, red, 180, 90)
    ],
  },
  "BY": {
    "green": [
      (doc 2)
    ],
    "blue": [
      (doc 3)
    ]
  },
  "KZ": {
    "blue": [
      (doc 4)
    ],
    "red": [
      (doc 5),
      (doc 6)
    ]
  }
}
每个存储桶中的文档不超过2个


我该怎么做呢?

这可以通过在
国家/地区
字段上的a,结合在
颜色
字段上的
术语
子聚合,最后是a来实现,以获得每个桶2个匹配的文档

{
   "size": 0,
   "aggs": {
      "countries": {
         "terms": {
            "field": "country"
         },
         "aggs": {
            "colors": {
               "terms": {
                  "field": "color"
               },
               "aggs": {
                  "docs": {
                     "top_hits": {
                        "size": 2
                     }
                  }
               }
            }
         }
      }
   }
}

哇!谢谢,这正是我们所需要的@Val如果您想要所有文档而不是前2名,您将如何更改查询?