弹性搜索,按桶数限制结果大小而不是文档

时间:2016-09-16 22:12:37

标签: elasticsearch

我有大约数千个分类的日志文档,我希望搜索所有日志条目,并将每个日志条目中的每一个放入正确的桶中,其中每个桶都是分类的(具有分类的唯一ID)。我知道如何限制文件的数量,但有没有办法限制桶的数量?

{  
   "size":10 #this limits by the docs length
    "aggregations": {
      "clfds": {
         "terms": {
            "field": "clsfd_id"
         }
      }
    },
   "sort":[  
      {  
         "clsfd_id":{  
            "order":"asc"
         }
      },
   ],
   "query":{  
      "filtered":{  
         "query":{  
            "match_all":{  

            }
         },
         "filter":{  
            "bool":{  
               "should":[  
                    #filled dynamically
               ],
            }
         }
      }
   }
}

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您要求的,但您只需使用size聚合中的terms属性来限制返回的存储桶数量:

{  
   "size":10 #this limits by the docs length
    "aggregations": {
      "clfds": {
         "terms": {
            "size": 50,
            "field": "clsfd_id"
         }
      }
    },
   "sort":[  
      {  
         "clsfd_id":{  
            "order":"asc"
         }
      },
   ],
   "query":{  
      "filtered":{  
         "query":{  
            "match_all":{  

            }
         },
         "filter":{  
            "bool":{  
               "should":[  
                    #filled dynamically
               ],
            }
         }
      }
   }
}

如果您想在聚合存储桶下查看实际文档,可以使用the top_hits aggregation

{
  "aggs": {
    "clfds": {
      "terms": {
        "field": "clsfd_id",
        "size": 50
      },
      "aggs": {
        "top_clfds_hits": {
          "top_hits": {
            "sort": [
              {
                "clsfd_id": {
                  "order": "asc"
                }
              }
            ],
            "size": 10
          }
        }
      }
    }
  }
}