如何过滤术语聚合

use*_*343 7 elasticsearch

目前我有这样的事情

aggs: {
  categories: {
    terms: {
      field: 'category'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这给了我每个类别的产品数量.但我有额外的条件.我需要获得每个类别中尚未销售的产品数量,因此我需要以terms某种方式执行过滤.

是否有一些使用聚合框架执行此操作的优雅方法,或者我需要编写筛选查询?

谢谢

Bra*_*ary 14

您可以在术语聚合过滤器聚合之间进行合并,这应该是它的外观:(已测试)

    aggs: {
      categories: {            
        filter: {term: {sold: true}},
        aggs: {
          names: {
            terms: {field: 'category'}
          }
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

您可以为过滤器添加更多条件,我希望这会有所帮助.

  • 您是否有机会在同一个存储桶中使用两个过滤条件? (2认同)
  • 我们可以使用 bool 过滤器对所有术语进行 AND,例如。"filter": { "bool" : { "must" : [ {"term" : { "isActive" : "1" } }, {"term" : { "isPrivate" : "0" } }, {"term" " : { "isOwner" : "1" } } ] } } (2认同)