# Dot Expander Processor（点扩展器处理器）

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

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

贡献者 : [那伊抹微笑](/display/~wangyangting)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

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

## Table 34. Dot Expand Options（表 34\. 点扩展选项）

| Name（名称） | Required（必要的） | Default（默认值） | Description（描述） |
| --- | --- | --- | --- |
| **`field`** | **yes** | **-** | 要扩展到 **object** **field**（对象字段）中的 **field**（字段） |
| **`path`** | **no** | **-** | 包含要扩展的字段的字段。只有当扩展的字段是另一个对象字段时才需要，因为该 **`field` **选项只能为 **leaf** **fields**（叶子字段）。 |

```
{
  "dot_expander": {
    "field": "foo.bar"
  }
}
```

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

```
{
  "foo.bar" : "value"
}
```

成为 : 

```
{
  "foo" : {
     "bar" : "value"
  }
}
```

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

例如，以下文档 : 

```
{
  "foo.bar" : "value2",
  "foo" : {
    "bar" : "value1"
  }
}
```

由 **dot_expander** 处理器转换成 : 

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

考虑以下 **document**（文档）: 

```
{
  "foo": "value1",
  "foo.bar": "value2"
}
```

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

```
{
  "processors" : [
    {
      "rename" : {
        "field" : "foo",
        "target_field" : "foo.bar""
      }
    },
    {
      "dot_expander": {
        "field": "foo.bar"
      }
    }
  ]
}
```

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