1つのフィールドに特定の値を持つ一連のドキュメントがある場合、2番目のフィールドに各値を持つドキュメントの数を知りたいです。
私は次のクエリを使用した用語集計でそれを試みました:
{
"size": 0,
"filter": {
"term": {
"field1": "value"
}
},
"aggregations": {
"field2" : {
"terms" : { "field" : "field2" }
}
}
}
ただし、返されるカウントはwhole indexの2番目のフィールドの各値を持つドキュメントの数を示し、最初のフィールドに特定の値を持つドキュメントに限定されません。
何が悪いのですか?
フィルターされたクエリを使用してみましたか?
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"field1": "value"
}
}
}
},
"aggregations": {
"field2": {
"terms": { "field": "field2" }
}
}
}
ここに比較があります: https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html
つまり、トップレベルのフィルターはリンクのpost_filterのように機能します。フィルタリングしてから集計を計算するには、クエリを使用する必要があります。
クエリ内のスコアの計算が原因でパフォーマンスが低下することが懸念される場合は、基本的にフィルターラッパークエリである定数スコアクエリを調べることができます。