Dot Expander Processor(点扩展器处理器)

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.3/dot-expand-processor.html

译文链接 : http://www.apache.wiki/pages/viewpage.action?pageId=10028281

贡献者 : 那伊抹微笑ApacheCNApache中文网

将一个带有 dot(点)的 field(字段)扩展到一个 obejct field(对象字段)中。该 processor(处理器)可以让名称中带有点的 field(字段)能被其 pipeline(管道)中的其它处理器访问。否则,这些 <<accessing-data-in-pipelines,fields> 不能被任何 processor(处理器)访问。

Table 34. Dot Expand Options(表 34. 点扩展选项)

Name(名称) Required(必要的) Default(默认值) Description(描述)
field yes - 要扩展到 object field(对象字段)中的 field(字段)
path no - 包含要扩展的字段的字段。只有当扩展的字段是另一个对象字段时才需要,因为该 field 选项只能为 leaf fields(叶子字段)。
  1. {
  2. "dot_expander": {
  3. "field": "foo.bar"
  4. }
  5. }

例如,点扩展处理器将会转换此文档 :

  1. {
  2. "foo.bar" : "value"
  3. }

成为 :

  1. {
  2. "foo" : {
  3. "bar" : "value"
  4. }
  5. }

如果已经有一个 bar 字段内嵌在 foo 下,那么该 processor(处理器)将会合并 foo.bar 字段到它里面去。如果该字段是一个 scalar value(标量值),那么它将会将该字段转换为一个 array(数组)字段。

例如,以下文档 :

  1. {
  2. "foo.bar" : "value2",
  3. "foo" : {
  4. "bar" : "value1"
  5. }
  6. }

dot_expander 处理器转换成 :

如果 leaf field(叶子字段)外的字段与预先存在的字段的 name(名称)一样,那么该 field(字段)需要先 rename(重命名)。

考虑以下 document(文档):

  1. {
  2. "foo": "value1",
  3. "foo.bar": "value2"
  4. }

在使用 dot_expander 处理器之前需要重命名 foo 字段。所以为了使该 foo.bar 字段正确的扩展到 foo 字段下的 bar 字段,则应该使用以下的 pipeline(管道):

  1. {
  2. "processors" : [
  3. {
  4. "rename" : {
  5. "field" : "foo",
  6. "target_field" : "foo.bar""
  7. }
  8. },
  9. {
  10. "dot_expander": {
  11. "field": "foo.bar"
  12. }
  13. }
  14. ]
  15. }

这样做的原因是因为该 Ingest 不知道如何自动的将 scalar field(标量字段)转换为 object field(对象字段)。