企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Accessing Data in Pipelines(访问管道中的数据) 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/accessing-data-in-pipelines.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/accessing-data-in-pipelines.html) 译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=9406187](http://www.apache.wiki/pages/viewpage.action?pageId=9406187) 贡献者 : [那伊抹微笑](/display/~wangyangting),[ApacheCN](/display/~apachecn),[Apache中文网](/display/~apachechina) 该 **pipeline**(管道)中的 **processor**(处理器)对通过 **pipeline**(管道)的 **document**(文档)进行读写访问操作。该 **processor**(处理器)可以访问 **source** **of** **document**(源文档)中的 **fields**(字段)以及 **document**(文档)的 **metadata** **field**(元数据字段)。 ### Accessing Fields in the Source(访问源文档中的字段) 访问 **source**(源文档)中的 **field** 是很简单的。您可以简单的通过它们的 **name**(名字)来引用 **fields**(字段)。例如 :  ``` { "set": { "field": "my_field" "value": 582.1 } } ``` 除此之外,**source**(源文档)中的 **field**(字段)始终可以通过 **_source** 前缀来访问 :  ``` { "set": { "field": "_source.my_field" "value": 582.1 } } ``` ### Accessing Metadata Fields(访问元数据字段) 您可以使用您在 **source**(源文档)中访问 **field**(字段)一样的方式来访问 **metadata** **fields**(元数据字段)。这是可以做到的,因为 **Elasticsearch** 不会允许 **source**(源文档)中的 **fields**(字段) 与 **metadata** **fields**(元数据字段)拥有一样的 **name**(名字)。 以下示例将 **document**(文档)的 **_id****metadata****field**(元数据字段)设置为 **1** :  ``` { "set": { "field": "_id" "value": "1" } } ``` 以下 **metadata** **fields**(元数据字段)可以通过 **processor**(处理器)来访问 : **_index**,**_type**,**_id**,**_routing**,**_parent**。 ### Accessing Ingest Metadata Fields(访问 Ingest 的元数据字段) 除了 **metadata** **fileds**(元数据字段)和 **source** **fields**(源文档字段)之外,**ingest** 也可以添加 **ingest** **metadata** 到它处理的 **documents**(文档)中去。这些 metadata properties(元数据属性)可以在 **_ingest** **key** 下进行访问。目前,**ingest** 会在 **ingest** **metadata** 的 **_ingest.timestamp key** 下添加 **ingest** **timestamp** 属性。该 **ingest** **timestamp** 是在 **Elasticsearch** 接收 **index**(索引)或 **bulk** **request** 来预处理 **document**(文档)的 **time**(时间)。 任何 **processor**(处理器)都可以在 **document**(文档)处理期间添加与 **ingest** 相关的 **metadata**(元数据)。**Ingest** **metadata** 是 **transient**(瞬时的),并且在 **pipeline**(管道)处理 **document**(文档)后丢失。因此,**ingest** **metadata** 将不会被索引。 以下示例添加了一个名为 **received** 的 **field**(字段),它的值是 **ingest** 的 **timestamp** :  ``` { "set": { "field": "received" "value": "{{_ingest.timestamp}}" } } ``` 与 **Elasticsearch** **metadata** **fields** 不一样的是,这个名为 **_ingest** 的 **metadata** **fields** 可以作为 **source** **of** **document**(源文档)中的有效名称。使用 **_source._ingest** 来引用 **source** **document**(源文档)中的 **field**(字段)。否则,**_ingest** 将会被作为一个 **ingest** **metadata** **field** 来解释。 ### Accessing Fields and Metafields in Templates(访问模版中的字段和元数据字段) 一些 **processor**(处理器)的设置也支持模板化。所支持模版的设置可以有零到多个 **template** **snippets**(模版片段)。一个 **template** **snippets**(模版片段)以 **{{** 开始并以 **}}** 结束。在模板中访问 **field**(字段)和 **metadata**(元数据)与通过普通的 **processor**(处理器)**field**(字段)设置完全相同。 以下示例添加了一个名为 **field_c** 的 **field**(字段)。它的值为 **field_a** 和 **field_b** 的值的 **concatenation**(串联)。 ``` { "set": { "field": "field_c" "value": "{{field_a}} {{field_b}}" } } ``` 以下示例使用 **source**(源文档)中 **geoip.country_iso_code** 字段的值来设置 **document** 将要被索引到的 **index**(索引)。 ``` { "set": { "field": "_index" "value": "{{geoip.country_iso_code}}" } } ```