Aggregationの結果を別のドキュメントに登録する方法

とあるインデックスAに対し、aggregationを実施した結果を、別のインデックスBに登録することは可能でしょうか。また、インデックスAにデータを登録した契機で自動的にaggregation結果がインデックスBに格納されるようにしたいです。

例えば、以下のページにある例について

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

以下のaggregationを実行

POST /sales/_search
{
    "query": {
        "term": { "tags": "car" }
    },
    "aggs": {
        "by_sale": {
            "nested" : {
                "path" : "comments"
            },
            "aggs": {
                "by_user": {
                    "terms": {
                        "field": "comments.username",
                        "size": 1
                    },
                    "aggs": {
                        "by_nested": {
                            "top_hits":{}
                        }
                    }
                }
            }
        }
    }
}

返却結果

{
  ...
  "aggregations": {
    "by_sale": {
      "by_user": {
        "buckets": [
          {
            "key": "baddriver007",
            "doc_count": 1,
            "by_nested": {
              "hits": {
                "total" : {
                   "value": 1,
                   "relation": "eq"
                },
                "max_score": 0.3616575,
                "hits": [
                  {
                    "_index": "sales",
                    "_type" : "_doc",
                    "_id": "1",
                    "_nested": {
                      "field": "comments",  
                      "offset": 0 
                    },
                    "_score": 0.3616575,
                    "_source": {
                      "comment": "This car could have better brakes", 
                      "username": "baddriver007"
                    }
                  }
                ]
              }
            }
          }
          ...
        ]
      }
    }
  }
}

上記の返却結果を別のドキュメントに出力したいです。上記の例でいうと、salesインデックスにデータが登録された契機で、aggregation結果を別インデックスに登録したいです

Elasticsearchにはそのような機能はなさそうな気がします。
LogstashでinputにElasticsearch、outputにもElasticsearchを使えばおっしゃってることはできそうな気がします。
難しくはないと思いますので、それを行うスクリプトを自分で書いてもいいかもしれませんね。

ご回答ありがとうございます。試してみます

変わったことをしているなぁ…という印象もありますので、Elasticsearchに拘らず他の方法を考えるのも良いと思いますよ。

transformという選択肢もあります。

https://www.elastic.co/guide/en/elasticsearch/reference/current/transforms.html

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.