上記、早急に回答頂きありがとうございます。
Enrich Processorで実現できることを理解しました。
元々の質問自体は頂いた回答でクリアできたのですが、
Enrich Processorの検証をする中で、解決できない事象が発生しましたので
再度質問させて頂きます。(お手数おかけします…)
◆上記回答の「index_b」のfiledが2階層の場合
例
補完用のデータの準備
POST index_c/_doc/a
{
"a_id": "1111",
"ddd.b_id": "aaaa"
}
POST index_b/_doc/a
{
"ddd.b_id": "aaaa",
"ddd.b_comment": "test"
}
Enrich Policyの作成
PUT /_enrich/policy/index-c-policy
{
"match": {
"indices": "index_c",
"match_field": "a_id",
"enrich_fields": ["ddd.b_id"]
}
}
PUT /_enrich/policy/index-b-policy
{
"match": {
"indices": "index_b",
"match_field": "ddd.b_id",
"enrich_fields": ["ddd.b_comment"]
}
}
PolicyのExecuteの実行
Ingest Pipelineの作成
PUT /_ingest/pipeline/test
{
"description": "forum test",
"processors": [
{
"enrich": {
"policy_name": "index-c-policy",
"field": "a_id",
"target_field": "b",
"max_matches": "1"
}
},
{
"enrich": {
"policy_name": "index-b-policy",
"field": "b.ddd.b_id", ←★
"target_field": "b",
"max_matches": "1"
}
},
{
"rename": {
"field": "b.ddd.b_comment",
"target_field": "ddd.b_comment"
}
},
{
"rename": {
"field": "b.ddd.b_id",
"target_field": "ddd.b_id"
}
},
{
"remove": {
"field": "b"
}
}
]
}
Simulate
POST _ingest/pipeline/test/_simulate
{
"docs": [
{
"_index": "aaa",
"_id": "id1",
"_source": {
"a_id": "1111",
"@timestamp": "2020-02-06T06:44:33.758Z"
}
}
]
}
Simulate結果
{
"docs" : [
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "field [ddd] not present as part of path [b.ddd.b_id]"
}
],
"type" : "illegal_argument_exception",
"reason" : "field [ddd] not present as part of path [b.ddd.b_id]"
}
}
]
}
おそらく上記★箇所でエラーが発生していると思われます。
enrich processorは、3階層のfiledは処理が出来ないのでしょうか。
3階層のfiledは処理できないとして、試しに★箇所の処理の前にrename処理を移動したところ、
別のエラーが発生しました。
Ingest Pipelineの作成
PUT /_ingest/pipeline/test
{
"description": "forum test",
"processors": [
{
"enrich": {
"policy_name": "index-c-policy",
"field": "a_id",
"target_field": "b",
"max_matches": "1"
}
},
{
"rename": {
"field": "b.ddd.b_id",
"target_field": "ddd.b_id"
}
},
{
"enrich": {
"policy_name": "index-b-policy",
"field": "ddd.b_id",
"target_field": "b",
"max_matches": "1"
}
},
{
"rename": {
"field": "b.ddd.b_comment",
"target_field": "ddd.b_comment"
}
},
{
"remove": {
"field": "b"
}
}
]
}
Simulate結果
{
"docs" : [
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "field [b.ddd.b_id] doesn't exist"
}
],
"type" : "illegal_argument_exception",
"reason" : "field [b.ddd.b_id] doesn't exist"
}
}
]
}
エラーを起こさず、index登録する方法はありますでしょうか?
お手数ですが、分かりましたら回答を頂けますと幸いです。