私は、Elasticsearch GeoHashグリッド集約を使用してマップクラスタリングを行っています。 クエリは平均100〜200バケットを返します。 それぞれのバケットはtop_hits集計を使用します。これは集約された各クラスタに対して3つのドキュメントを返すために使用します。合計文書に基づいてtop_hitsサブ集約をフィルタリングする
親集計(GeoHash)が3つ以上のドキュメントを集約していない場合にのみ、を返すことが問題です。
クラスタが3つ以上のドキュメントを集約する場合、私はESを使用しないため、このクラスタのドキュメントを返すことは望ましくありません。
Bucket Selector Aggregationを使用しようとしましたが、正しいbucket_pathを構築できませんでした。 top_hits集約と同じレベルでバケットセレクタ集計を使用します。 バケツの合計ドキュメント数はtop_hits.hits.total
ですが、私が得意とするものはreason=path not supported for [top_hits]: [hits.total]
です。
これはelasticsearchで可能ですか? ほとんどのクエリでは、小さなバケットのバケツが3つ以下のドキュメントしか持たないので、重要です。しかし、トップ・ヒット・サブ集合は、1000文書のクラスタであっても常に上位3の文書を返す。 クエリの結果で200個のバケットが返され、それらのうち5個だけが< = 3個のドキュメントを集計しているため、200 * 3(Teレスポンスはこの場合は10MB)ではなく5 * 3個のドキュメントのみを返します。ここで
は、私のクエリのaggsの一部です:
"clusters": {
"geohash_grid": {
"field": "coordinates",
"precision": 3
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 3
}
},
"top_hits_filter": {
"bucket_selector": {
"buckets_path": {
"total_hits": "top_hits._count" // tried top_hits.hits.total
},
"script": {
"inline": "total_hits <= 3"
}
}
}
}
}
おかげで、この問題のため、我々はジオハッシュを使用して停止してきたように、それは私のために少し遅れだけれども集約。これがうまくいけば、1月にいつか見てから適切に答えをマークします。 – mbudnik