点展开处理器
编辑点展开处理器
编辑将带点的字段展开为一个对象字段。此处理器允许管道中的其他处理器访问名称中带有点的字段。否则,这些字段无法被任何处理器访问。
表 15. 点展开选项
名称 | 必需 | 默认值 | 描述 |
---|---|---|---|
|
是 |
- |
要展开为对象字段的字段。如果设置为 |
|
否 |
- |
包含要展开的字段的字段。仅当要展开的字段是另一个对象字段的一部分时才需要,因为 |
|
否 |
false |
控制当存在与展开字段冲突的现有嵌套对象时的行为。当 |
|
否 |
- |
处理器的描述。有助于描述处理器的目的或其配置。 |
|
否 |
- |
有条件地执行处理器。请参阅有条件地运行处理器。 |
|
否 |
|
忽略处理器的失败。请参阅处理管道失败。 |
|
否 |
- |
处理处理器的失败。请参阅处理管道失败。 |
|
否 |
- |
处理器的标识符。有助于调试和指标。 |
{ "dot_expander": { "field": "foo.bar" } }
例如,点展开处理器会将以下文档
{ "foo.bar" : "value" }
转换为
{ "foo" : { "bar" : "value" } }
如果 foo
下面已经嵌套了一个 bar
字段,则此处理器会将 foo.bar
字段合并到其中。如果该字段是标量值,则它会将该字段转换为数组字段。
例如,以下文档
{ "foo.bar" : "value2", "foo" : { "bar" : "value1" } }
通过 dot_expander
处理器转换为
{ "foo" : { "bar" : ["value1", "value2"] } }
对比一下当 override
选项设置为 true
时的情况。
{ "dot_expander": { "field": "foo.bar", "override": true } }
在这种情况下,展开字段的值将覆盖嵌套对象的值。
{ "foo" : { "bar" : "value2" } }
field
的值也可以设置为 *
以展开所有顶级带点字段名称
{ "dot_expander": { "field": "*" } }
点展开处理器会将以下文档
{ "foo.bar" : "value", "baz.qux" : "value" }
转换为
{ "foo" : { "bar" : "value" }, "baz" : { "qux" : "value" } }
如果带点字段嵌套在非带点结构中,则使用 path
选项来导航非带点结构
{ "dot_expander": { "path": "foo" "field": "*" } }
点展开处理器会将以下文档
{ "foo" : { "bar.one" : "value", "bar.two" : "value" } }
转换为
{ "foo" : { "bar" : { "one" : "value", "two" : "value" } } }
如果叶子字段之外的任何字段与具有相同名称的预先存在的字段冲突,则需要先重命名该字段。
考虑以下文档
{ "foo": "value1", "foo.bar": "value2" }
然后需要先重命名 foo
,然后再应用 dot_expander
处理器。因此,为了使 foo.bar
字段正确地展开到 foo
字段下的 bar
字段中,应使用以下管道
{ "processors" : [ { "rename" : { "field" : "foo", "target_field" : "foo.bar" } }, { "dot_expander": { "field": "foo.bar" } } ] }
这样做的原因是 Ingest 不知道如何自动将标量字段转换为对象字段。