5

ネストされたオブジェクトを介したフィルタリングを使用して、フィルタリングされた Elasticsearch クエリを作成し、集約を作成して、ネストされたオブジェクト リスト内のネストされたオブジェクトの最小値を取得したいと考えています。

フィルタリング部分は機能しますが、aggs (集約) 部分とバインドできません。フィルターの後にパーツをコードに追加すると、.aggs.bucket無視される ( に表示されないsearch.to_dict()) か、構文エラーが発生します。

それらを結び付ける方法の例を誰か教えてもらえますか? nested1.foo.barフィルタリングされたクエリ結果と計算された最小値の両方を1つの応答で取得しようとしています

スキーマの例:

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 フィールドがあります)

4

1 に答える 1