管道的使用
管道中对文档数据的访问
对文档字段的操作
假如需要对文档中某些字段进行操作,只需要在field中指定字段名称或者通过_source前缀进行访问。
使用官方提供的_simulate模拟操作我们可以很轻松的看到其效果。下面内容一个直接访问foo,一个通过_source.boo对文档数据进行操作的例子
POST _ingest/pipeline/_simulate
{
"pipeline": {
"description": "_description",
"processors": [
{
"set": {
"field": "foo",
"value": "foo_value"
}
},
{
"set": {
"field": "_source.boo",
"value": "boo_value"
}
}
]
},
"docs": [
{
"_index": "index",
"_id": "id",
"_source": {
"foo": "foo",
"boo": "boo"
}
},
{
"_index": "index",
"_id": "id",
"_source": {
"foo": "foo",
"boo": "boo"
}
}
]
}
结果可以发现使用这两个方式都可以修改对应内容。
{
"docs" : [
{
"doc" : {
"_index" : "index",
"_type" : "_doc",
"_id" : "id",
"_source" : {
"boo" : "boo_value",
"foo" : "foo_value"
},
"_ingest" : {
"timestamp" : "2019-11-27T01:32:41.133778Z"
}
}
},
{
"doc" : {
"_index" : "index",
"_type" : "_doc",
"_id" : "id",
"_source" : {
"boo" : "boo_value",
"foo" : "foo_value"
},
"_ingest" : {
"timestamp" : "2019-11-27T01:32:41.133785Z"
}
}
}
]
}
除了文档中的字段,我们也可以使用
_index、_type、_id、_routing对ES的元数据进行访问。(无需担心此操作会影响文档数据,因为ES限制映射中的字段不能存在和元数据相同的字段名)
在上面例子的返回内容中可以看到有一个_ingest属性。_ingest的数据同样可以使用_ingest.timestamp来提取其时间戳。但是需要注意的是ingest元数据并不是持久的数据,其在管道处理完毕之后就被丢弃。
使用文档中的数据
有些时候我们使用管道只是进行时间戳的赋值或者字段拼接,其内容根据数据内容的变化而变化。这个时候我们需要获取到文档或者ES的元素进行操作。这个情况下我们可以使用{
{field}}的方式进行访问。
获取_ingest中的时间戳赋值给received
{
"set"

最低0.47元/天 解锁文章
447

被折叠的 条评论
为什么被折叠?



