我想通过嵌套对象进行过滤来构建过滤后的Elasticsearch查询,并进行聚合以获取嵌套对象列表中嵌套对象的最小值。
过滤部分有效,但我无法将其与aggs(聚合)部分绑定。当我将.aggs.bucket
部分添加到过滤器之后的代码中时,它要么被忽略(在中不可见search.to_dict()
),要么给我语法错误。
谁能给我一个如何将它们捆绑在一起的例子吗?我正在尝试使两个过滤的查询结果都nested1.foo.bar
在一个响应中结束计算的最小值
模式示例:
class MyExample(DocType): myexample_id = Integer() nested1 = Nested( properties={ 'timestamp': Date(), 'foo': Nested( properties={ 'bar': Float(), } ) } ) nested2 = Nested( multi=False, properties={ 'x': String(), 'y': String(), } )
建立查询:
from elasticsearch_dsl import Search, Q search = Search().filter( 'nested', path='nested1', inner_hits={}, query=Q( 'range', **{ 'nested1.timestamp': { 'gte': exampleDate1, 'lte': exampleDate2 } } ) ).filter( 'nested', path='nested2', inner_hits={'name': 'x'}, query=Q( 'term', **{ 'nested2.x': x } ) ).filter( 'nested', path='nested2', inner_hits={'name': 'y'}, query=Q( 'term', **{ 'nested2.y': y } ) )
基本上,我需要做的是获取每个唯一MyExample文档的所有嵌套nested1.foo.bar值的最小值(它们具有唯一的myexample_id字段)