ドットエクスパンダープロセッサ
ドットを含むフィールドをオブジェクトフィールドに展開します。このプロセッサは、名前にドットを含むフィールドがパイプライン内の他のプロセッサによってアクセス可能になることを許可します。そうでなければ、これらのフィールドはどのプロセッサからもアクセスできません。
名前 | 必須 | デフォルト | 説明 |
---|---|---|---|
field |
はい | - | オブジェクトフィールドに展開するフィールド。* に設定すると、すべてのトップレベルフィールドが展開されます。 |
path |
いいえ | - | 展開するフィールドを含むフィールド。展開するフィールドが別のオブジェクトフィールドの一部である場合のみ必須です。field オプションはリーフフィールドのみを理解できます。 |
override |
いいえ | 偽 | 展開されたフィールドと競合する既存のネストされたオブジェクトがすでに存在する場合の動作を制御します。false の場合、プロセッサは古い値と新しい値を配列に結合して競合をマージします。true の場合、展開されたフィールドの値が既存の値を上書きします。 |
description |
いいえ | - | プロセッサの説明。プロセッサの目的や構成を説明するのに役立ちます。 |
if |
いいえ | - | プロセッサを条件付きで実行します。条件付きでプロセッサを実行するを参照してください。 |
ignore_failure |
いいえ | false |
プロセッサの失敗を無視します。パイプラインの失敗を処理するを参照してください。 |
on_failure |
いいえ | - | プロセッサの失敗を処理します。パイプラインの失敗を処理するを参照してください。 |
tag |
いいえ | - | プロセッサの識別子。デバッグやメトリクスに役立ちます。 |
Js
{
"dot_expander": {
"field": "foo.bar"
}
}
例えば、ドットエクスパンダープロセッサはこのドキュメントを変換します:
Js
{
"foo.bar" : "value"
}
に変換されます:
Js
{
"foo" : {
"bar" : "value"
}
}
もしbar
フィールドがfoo
の下にネストされている場合、このプロセッサはfoo.bar
フィールドをそれにマージします。フィールドがスカラー値である場合、そのフィールドは配列フィールドに変換されます。
例えば、次のドキュメント:
Js
{
"foo.bar" : "value2",
"foo" : {
"bar" : "value1"
}
}
はdot_expander
プロセッサによって次のように変換されます:
Js
{
"foo" : {
"bar" : ["value1", "value2"]
}
}
#### Js
``````js
{
"dot_expander": {
"field": "foo.bar",
"override": true
}
}
`
その場合、展開されたフィールドの値はネストされたオブジェクトの値を上書きします。
Js
{
"foo" : {
"bar" : "value2"
}
}
field
の値は*
に設定して、すべてのトップレベルのドット付きフィールド名を展開することもできます:
Js
{
"dot_expander": {
"field": "*"
}
}
ドットエクスパンダープロセッサはこのドキュメントを変換します:
Js
{
"foo.bar" : "value",
"baz.qux" : "value"
}
に変換されます:
Js
{
"foo" : {
"bar" : "value"
},
"baz" : {
"qux" : "value"
}
}
- ドットフィールドが非ドット構造内にネストされている場合、
path
オプションを使用して非ドット構造をナビゲートします:
- ドットフィールドが非ドット構造内にネストされている場合、
Js
{
"dot_expander": {
"path": "foo"
"field": "*"
}
}
ドットエクスパンダープロセッサはこのドキュメントを変換します:
Js
{
"foo" : {
"bar.one" : "value",
"bar.two" : "value"
}
}
に変換されます:
Js
{
"foo" : {
"bar" : {
"one" : "value",
"two" : "value"
}
}
}
- リーフフィールド以外のフィールドが同じ名前の既存のフィールドと競合する場合、そのフィールドは最初に名前を変更する必要があります。
次のドキュメントを考えてみてください:
Js
{
"foo": "value1",
"foo.bar": "value2"
}
その後、foo
はdot_expander
プロセッサが適用される前に最初に名前を変更する必要があります。foo.bar
フィールドがbar
フィールドにfoo
フィールドの下で正しく展開されるためには、次のパイプラインを使用する必要があります:
Js
{
"processors" : [
{
"rename" : {
"field" : "foo",
"target_field" : "foo.bar"
}
},
{
"dot_expander": {
"field": "foo.bar"
}
}
]
}
その理由は、Ingestがスカラーフィールドをオブジェクトフィールドに自動的にキャストする方法を知らないからです。