上位n項の平均 - elasticsearch

特定のインデックスでは、ドキュメントにはキーワード、ランク、タイムスタンプがあります。キーワードのランクは時々異なる場合があります。つまり、データセットは次のようになります。

{"keywords": "piano", "rank" 1, "timestamp": 1437642812}
{"keywords": "piano", "rank" 2, "timestamp": 1437642813}
{"keywords": "electric guitar", "rank" 5, "timestamp": 1437644326}

上位500個のキーワードの平均ランクを取得したいと思います。しかし、私はこれを行う方法を見つけることができません。

私の現在の試行では常に結果の平均が個別に得られるようですが、集計の上位の結果のみのデータセット全体の平均を取得したいです。

POST _search
{
"aggs": {
"top_keywords": {
"terms": {
"field": "keywords",
"size": 1
}
},
"avg_rank": {
"avg": {"field": "rank"}
}
},
"size": 0
}

top_hitsを使用した試みも成功していません。

他の場所でクエリの分割について読んだことがあります最初に上位のキーワードのリストを取得し、2番目のクエリで最初のクエリから返されたキーワードでドキュメントをフィルタリングします。クエリをKibanaに送りたいので、これが不要であることを願っています。

これらの関連トピックも満足のいく答えを提供しません。

誰かが私を正しい方向に向けることができますか?

回答:

回答№1は1

ElasticsSearch開発者は、現在は不可能だと言っています。

現在のバージョンではこれは不可能ですが、バージョン2.0のパイプライン集約では、avg_bucket集約を使用してこれを行うことができます。 https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-pipeline-avg-bucket-aggregation.html

それまでの間、上位500の用語について集計を行い、クライアント側で平均計算を実行する必要があります。

そのため、現在、このデータをKibanaで表示することはできません。

はい、これは2で機能します。Elasticsearchへの直接のリクエストの場合は0。ただし、機能がKibanaインターフェイスに追加されるまでには時間がかかります。 Kibanaチームが追加方法について考えていることです

ソース: https://discuss.elastic.co/t/average-of-top-n-terms/26165