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のいずれかに集約します。

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "dim1": {
      "terms": {
        "script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
        "size": 10
      },
      "aggs": {
        "successful_transfers": {
          "sum": {
            "field": "header.successful_transfers"
          }
        }
      }
    }
  }
}

これで、集計によって、 header.called_entity.uuid または header.coverage_entity.uuid のいずれかから用語が生成さまし

集計キーの値を使用して集計をフィルター処理するにはどうすればよいですか? たとえば、バケットごとに、header.called_entity.uuidのみから取得されたuuidを持つドキュメントの数を数えたいとします。そんな感じ:

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggs": {
    "dim1": {
      "terms": {
        "script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
        "size": 10
      },
      "aggs": {
        "successful_transfers": {
          "sum": {
            "field": "header.successful_transfers"
          }
        },
        "from_called_entity": {
          "filter": {
            "term": { "header.called_entity.uuid": BUCKET_KEY }
          }
        }
      }
    }
  }
}
4

1 に答える 1