2

我有以下聚合过滤器:

“aggs”:{“agg_name”:{“filter”:{“exists”:{“field”:“filed_name”}}}}}}

但我想用elasticsearch-dsl把它写得更干净。这是我能做的最好的:

aggs.bucket('agg_name', {"filter": {"exists": {"field": "field_name"}}})

但我知道有一种更清洁的方法。一些失败的尝试:

  • aggs.bucket('agg_name', A('filter', type='exists', field='field_name'))
  • aggs.bucket('agg_name', A('filter','exists', field='field_name'))
  • aggs.bucket('agg_name', A().filter('exists', field='field_name'))
  • aggs.bucket('agg_name').filter('exists', field='field_name')

我目前无法从文档中获取正确的信息。是否可以写得更像 DSL?

4

3 回答 3

2

你还没有尝试过这个:

aggs.A('filter', query.Q('exists', field='field_name'))

更多示例可以在单元测试源代码中找到

于 2017-01-28T05:34:40.837 回答
0
s.aggs.bucket("bucket_name", "filter",
                      query.Q("term", fieldname='vale')).metric('field', 'sum', field="whatever")

这对我有用

于 2021-01-06T10:44:02.853 回答
0

对于看起来更像其他 DSL 聚合的语法,您可以使用

s.aggs.bucket("filtered", 
    A("filter", filter=Term(my_field="my_value"))
)
于 2021-09-26T01:39:03.843 回答