4

更新された質問

私のクエリでは、日付で集計してからセンサー名で集計します。ネストされた集計と、親バケットのドキュメント (またはその他の集計) の合計数から比率を計算することは可能ですか? クエリの例:

{
  "size": 0,
  "aggs": {
    "over_time": {
      "aggs": {
        "by_date": {
          "date_histogram": {
            "field": "date",
            "interval": "1d",
            "min_doc_count": 0
          },
          "aggs": {
            "measure_count": {
              "cardinality": {
                "field": "date"
              }
            },
            "all_count": {
              "value_count": {
                "field": "name"
              }
            },
            "by_name": {
              "terms": {
                "field": "name",
                "size": 0
              },
              "aggs": {
                "count_by_name": {
                  "value_count": {
                    "field": "name"
                  }
                },
                "my ratio": count_by_name / all_count * 100 <-- How to do that?
              }
            }
          }
        }
      }
    }
  }
}

比率count_by_name / all_count * 100を提供するカスタム メトリックが必要です。それは ES で可能ですか、それともクライアントで計算する必要がありますか? これは私には非常に簡単に思えますが、まだ方法が見つかりません。

古い投稿:

バケットの平均を計算するときに、Elasticsearch でドキュメントの総数 (またはその他のメトリック) を考慮する方法はありますか?

例: さまざまな時間にイベントを生成する 100000 個のセンサーがあります。すべてのイベントは、タイムスタンプと値を持つドキュメントとしてインデックス化されます。

値と日付ヒストグラムの比率を計算したいときに、一部のセンサーが一度に値しか生成しない場合、センサーの存在しない値 (ドキュメント) を null ではなく 0 として Elasticsearch で処理する必要があります。したがって、日ごとに集計し、センサーが午後 10 時 (3) と午後 11 時 (5) に 2 つの値のみを生成した場合、その日の集計は (3+5)/24、または形式的には SUM(VALUE)/24 になります。

代わりに、Elasticsearch は (3+5)/2 のように平均を計算しますが、これは私の場合は正しくありません。

かつて Github https://github.com/elastic/elasticsearch/issues/9745にチケットがありましたが、答えは「アプリケーションで処理してください」でした。平均比率を正しく取得するには、すべてのセンサー/時間の組み合わせに対して無数のゼロ値ドキュメントを生成する必要があるため、それは私にとって答えではありません。

これに関するアイデアはありますか?

4

2 に答える 2