1

質問の仕方がわからない。Elasticsearch 2.2 を使用しています。

5 つのドキュメントで構成されるデータセットの例から始めましょう。

[
  {
    "header": {
      "called_entity": { "uuid": "a" },
      "coverage_entity": {},
      "sucessful_transfers": 1
    }
  },
  {
    "header": {
      "called_entity": { "uuid": "a" },
      "coverage_entity": { "uuid": "b" },
      "sucessful_transfers": 1
  }
  },
  {
    "header": {
      "called_entity": { "uuid": "b" },
      "coverage_entity": { "uuid": "a" },
      "sucessful_transfers": 1
    }
  },
  {
    "header": {
      "called_entity": { "uuid": "b" },
      "coverage_entity": { "uuid": "a" },
      "sucessful_transfers": 0
    }
  }
]

called_entityには常にuuidがあります。 coverage_entityは空にすることも、uuidを持つこともできます。

私が望むのは、called_entity.uuidまたはcoverage_entity.uuidのいずれかで集計し、ドキュメントの合計量と success_transfers の合計をカウントすることです。したがって、これらの 5 つのドキュメントについては、結果として次のようになります。

uuid,doc_count,successful_transfers_count
"a",4,3
"b",3,2

問題は、集約キーがcalled_entity.uuidまたはcoverage_entity.uuuidのいずれかにある限り、同じドキュメントを複数の集約で使用できることを意味することです(それが可能かどうかさえわからないため、投稿していますここ)。

私が現在行っていることは、単にcalled_entity.uuidフィールドを集計することですが、もちろんそれだけでは十分ではありません。

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "dim_1": {
      "terms": {
        "field": "header.called_entity.uuid",
        "size": 0
      },
      "aggs": {
        "successful_transfers": {
          "sum": {
            "field": "header.successful_transfers"
          }
        }
      }
    }
  }
}

これは私に次のようなものを与えます:

uuid,doc_count,successful_transfers_count
"a",2,2
"b",2,1

...これは私が望むものではありません。では、複数の値を集計するには、または特定の集計について、(集計内の 1 つのドキュメントだけでなく) すべてのドキュメントに存在する値に基づいてデータを計算するにはどうすればよいでしょうか?

ありがとうございました。

4

1 に答える 1