1
2レベルのネスト(ドキュメントごとに別々の最小値)で最小(最小)値を探しようとしています。Python elasticsearch文書あたりのネストされた値のDSL集計/メトリック
これまでのところ、私は、検索結果内のすべてのネストされた値の最小値をカウントするが、ドキュメントごとに分離することはできません。
私の例のスキーマ:
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
}
)
)
search.aggs.bucket(
'nested1', 'nested', path='nested1'
).bucket(
'nested_foo', 'nested', path='nested1.foo'
).metric(
'min_bar', 'min', field='nested1.foo.bar'
)
は基本的に私は何をする必要があるか、すべてのネストされたnested1分間値を得ることです各ユニークなMyExampleの.foo.bar値(固有のmyexample_idフィールドを持っています)
私は、この最小値をインデックス時に計算し、文書のルートレベルに保存することを提案するつもりでした。 '入れ子になった'文書やスクリプトを使って、いくつかのレベルのaggsよりもはるかにパフォーマンスが向上します。 – Val