2016-09-16 43 views
0

我拥有数千万个分类广告的数百万个日志文档,我想搜索所有日志条目并将其中每个日志条目都放在正确的存储桶中,一个分类(具有分类的唯一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 
       ], 
      } 
     } 
     } 
    } 
} 
+0

基数聚合是度量聚合。任何你不使用词汇聚合的原因? – rajat

+0

@rajat,哦我在问题中使用了错误的查询,纠正了它。 – SteveL

+0

在这种情况下,只需给它一个“大小”参数即可返回最近的结果。 – rajat

回答

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 
      } 
     } 
     } 
    } 
    } 
}