0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Elasticsearch > Logstash > 親子関係データをLogstashで格納

はじめに

Join field typeの導入に伴い、親子のリレーションシップが新しい形式に更新されました。
Logstashを使用して、親と子の結合に使用されるフィールドを指定する方法をメモします。

本稿はほぼ以下の意訳です。
How to create a parent using the new join type with logstash - Elastic Stack / Logstash - Discuss the Elastic Stack

詳しくは別途また記事を書く予定。

マッピング追加

Join field typeを作成するためIndexにマッピングを設定します。

PUT logstash-index-name
{
  "mappings": {
    "doc": {
      "properties": {
        "join_field": { 
          "type": "join",
          "relations": {
            "customer": "actions"
          }
        }
      }
    }
  }
}

Logstashでの設定追加

Logstash経由で親を追加することができます。
filterに以下を追加します。

mutate {
    add_field => { "join_field" => "customer" }         
}

子の設定では以下のように追加します。
パイプラインは親と子で分けた方がよさそうです

mutate {
    add_field => {"[join_field][name]" => "actions"}
    add_field => {"[join_field][parent]" => "%{parent_id}"}
}

子の設定の場合には
また、LogstashのOutputでroutingIDを追加する必要があります。

if [type] == "child_actions" {      
    elasticsearch {
        hosts => [ "localhost:9200" ]
        index => "logstash-index-name"
        routing => "%{parent_id}"  <-- here!
    }       
}

これで、すべての子ドキュメントに "join_field "がネストされたフィールドとして追加されるようになりました。

詳しくは別途また記事を書きます。

参考
How to create a parent using the new join type with logstash - Elastic Stack / Logstash - Discuss the Elastic Stack

Elasticsearch Reference [7.9] » Mapping » Field data types » Join field type

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?