【ingest node】JSON processor 配列のパース処理に関して

お世話になります。

Ingest nodeのJSON processorに関して質問させて頂きます。

以下にてmessage("objects"の配列に"references"の配列がネストされている)のデータをJSON processorを使いパース処理を検証しています。

Simulate上、"references"は"json_target.objects"の値となっていますが、
"json_target.objects"と同じ階層の項目名にしたいです。(例:"json_target.objects.references")

上記を実現できる方法がありましたら教えてください。

▼Simulate

POST /_ingest/pipeline/_simulate
{
  "pipeline": {
  "processors": [
    {
      "json": {
        "field": "message",
        "target_field": "json_target"
      }
    },
    {
      "set": {
        "field": "_index",
        "value": "bbb"
      }
    }
  ],
  "on_failure": [
    {
      "set": {
        "field": "_index",
        "value": "failed-bbb"
      }
    },
    {
      "set": {
        "field": "error",
        "value": "{{ _ingest.on_failure_message }}"
      }
    }
  ]
  },
  "docs": [
    {
      "_index": "aaa",
      "_id": "id1",
      "_source": {
        "message": "{\"objects\":[{\"references\":[{\"id\":\"111\",\"source_name\":\"abc\",\"url\":\"https://aaa.bbb.org\"}]}],\"version\":\"2.0\",\"type\":\"bundle\"}"
      }
    }
  ]
}

▼Simulate結果

{
  "docs" : [
    {
      "doc" : {
        "_index" : "bbb",
        "_type" : "_doc",
        "_id" : "id1",
        "_source" : {
          "json_target" : {
            "type" : "bundle",
            "version" : "2.0",
            "objects" : [
              {
                "references" : [
                  {
                    "source_name" : "abc",
                    "url" : "https://aaa.bbb.org",
                    "id" : "111"
                  }
                ]
              }
            ]
          },
          "message" : """{"objects":[{"references":[{"id":"111","source_name":"abc","url":"https://aaa.bbb.org"}]}],"version":"2.0","type":"bundle"}"""
        },
        "_ingest" : {
          "timestamp" : "2020-08-26T04:17:06.724213Z"
        }
      }
    }
  ]
}

以上、お手数ですが回答を宜しくお願い致します。

@harue さん、

JSON processor でパースした後にさらに別のsetプロセッサを使ってreferencesを別の場所にコピーして、元のを削除すれば、階層を変えられると思うのですが、ちょっと実現させたい結果の JSON がどんなイメージなのか読み取れませんでした。

サンプルのデータでは、objects も配列なので、複数の要素が含まれる可能性があるのではないでしょうか?そして objects[0]objects[1] のそれぞれの子要素で references を持っていた場合などはどう扱うのか、そもそも、objects は要素一つしか持たないという前提があるのかもですが。

サンプルの入力データを渡すと、どんな結果になるべきか、結果のJSONイメージを共有していただけたらもう少し役に立つコメントができるかもしれません。

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