如何使用聚合和复合查询进行elasticsearch-dsl操作

4
我正在使用聚合(aggregations)和聚合桶(aggregation bucket),其中一个默认只接受一个键值(key value),然后我进行了研究并找到了解决方法。
"aggs" : {
        "my_buckets": {
            "composite" : {
                "sources" : [
                    { "category_pk": { "terms": { "field": "category.pk"} } },
                    { "category_name": { "terms": {"field": "category.name" } } }
                ]
            }
        }
    }
}

上面的代码返回了两个键,即“和_doc_count”,但我无法应用于elasticsearch-dsl。请有人帮助我。

  • 谢谢

1
你的意图不是很清楚。你能解释一下你想要实现什么吗? - Val
谢谢你的帮助。我解决了这个问题并在下面写了一篇文章。 - Ozan Teoman Dayanan
1个回答

4

我解决了这个问题,当我们使用 Composite 时。

s = ProductDocument.search()
brand_name = A('terms', field='brand.name')
brand_pk = A('terms', field='brand.id')
brand_key_aggs = [
    {'brand_pk': brand_pk},
    {'brand_name': brand_name}
]
s.aggs.bucket('brand_terms', "composite", sources=brand_key_aggs) 

示例结果

 {  
               'key':{  
                  'brand_pk':869,
                  'brand_name':'Uni Baby'
               },
               'doc_count':2
            },

好的,我现在明白了,你想要 Python 版本的 DSL 查询。很高兴你自己解决了! - Val
对于那些需要更新后的答案的人,代码的最后一行aggs(至少在我的ES-dsl版本中)改为:s.aggs.bucket('brand_terms',"composite",sources=brand_key_aggs) - Reyhaneh Torab

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