ElasticSearch聚合查询仅返回10个桶(bucket)

9

我正在运行一个聚合查询并指定大小为100,但ES仅返回10个桶。为什么?我错过了什么?

{   
  "size": 100
   ,"query": {
      "bool": {
        "must": [
          { "term": {"app": "cnn"} }
        ]
      }
    }
   ,"aggs": {
    "unique_client": {
      "terms": {"field": "client"}    
      }     
    }
}
2个回答

13

将顶部大小参数设置为零表示这是一个聚合操作。通过在terms聚合括号内指定大小来设置返回的bucket数量。

{   
  "size": 0
   ,"query": {
      "bool": {
        "must": [
          { "term": {"app": "cnn"} }
        ]
      }
    }
   ,"aggs": {
    "unique_client": {
      "terms": {
        "field": "client",
        "size" : 100
      }
     }     
    }
}

如果将其设置为0,则该值将默认为Integer.MAX_VALUE。


谢谢你们两位。我给Vanlightly点赞,因为他回复得更快。 - epipko
实际上我是第二个回答的,但是ChintanShah25的答案中的JSON有语法错误。 - Vanlightly

4

外部大小(outer size)表示您在查询中获取的文档总数,因此size = 100将返回100个文档。如果要获取100个聚合桶(aggregations bucket),请在unique_client聚合中指定内部大小(inside size),如下所示:

{   
  "size": 0
   ,"query": {
      "bool": {
        "must": [
          { "term": {"app": "cnn"} }
        ]
      }
    }
   ,"aggs": {
    "unique_client": {
      "terms": {"field": "client"},
      "size" : 100
      }     
    }
}

默认情况下,聚合结果的大小为10,因此您会得到10个结果。我将“外部大小”设置为0,以仅获取聚合结果。


你好,能帮我解决这个问题吗?我在elastic search中有大约100万条记录,并且正在使用上述聚合。我想要所有的聚合桶可能是50万,但是这会导致超时,怎么处理呢?我采用了每次请求5万个聚合桶的策略,然后在处理后将数据转移到其他索引中,然后删除原始数据,但这并没有给我正确的结果,你有什么想法吗? - Shubham Dixit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接