摄取处理器 foreach 或脚本以替换数组中的所有项目
Ingest processor foreach or script to replace all items in array
我正在尝试 运行 摄取管道以将数组中的“开”和“关”实例替换为 true 和 false。
这可以完美地处理普通字符串,例如像这样的数据
[{onoffboolean: "on"}]
我可以通过以下方式处理:
processors: [
{
set: {
field: 'onoffboolean',
description: 'String represented trues to native true',
if: "ctx?.onoffboolean == 'on'",
value: true
}
},
{
set: {
field: 'onoffboolean',
description: 'String represented falses to native true',
if: "ctx?.onoffboolean == 'off'",
value: false
}
},
],
但是当它是一个值数组时,例如:
["on", "on", "off"] to process into [true, true, false]
我无法找到合适的处理器来处理这个问题。我曾尝试使用 foreach,但似乎在使用“if”条件时“_ingest._value”不可用。
这个弹性论坛帖子建议改用无痛脚本
https://discuss.elastic.co/t/foreach-ingest-processor-conditional-append-processor/216884/2
但是我对无痛脚本的理解还不够,无法解决这个问题。
如果你有一个具体的数组字段(我们称之为list_of_attributes
),你可以使用下面的脚本处理器:
PUT _ingest/pipeline/bool_converter
{
"description": "Trims and lowercases all string values",
"processors": [
{
"script": {
"source": """
ctx.list_of_attributes = ctx.list_of_attributes.stream()
.map(str -> str == 'on' ? true : false)
.collect(Collectors.toList())
"""
}
}
]
}
然后在您摄取文档时应用它:
POST your-index/_doc?pipeline=bool_converter
{
"list_of_attributes": ["on", "on", "off"]
}
如果您有多个这样的数组字段,您可以通过调整 to the question .
来迭代文档的字段
不要脸的外挂:我奉献一个whole chapter to ingesting & pipelines in my recently released Elasticsearch Handbook。如果您是 ES 的新手,请尝试一下!
我正在尝试 运行 摄取管道以将数组中的“开”和“关”实例替换为 true 和 false。
这可以完美地处理普通字符串,例如像这样的数据
[{onoffboolean: "on"}]
我可以通过以下方式处理:
processors: [
{
set: {
field: 'onoffboolean',
description: 'String represented trues to native true',
if: "ctx?.onoffboolean == 'on'",
value: true
}
},
{
set: {
field: 'onoffboolean',
description: 'String represented falses to native true',
if: "ctx?.onoffboolean == 'off'",
value: false
}
},
],
但是当它是一个值数组时,例如:
["on", "on", "off"] to process into [true, true, false]
我无法找到合适的处理器来处理这个问题。我曾尝试使用 foreach,但似乎在使用“if”条件时“_ingest._value”不可用。
这个弹性论坛帖子建议改用无痛脚本
https://discuss.elastic.co/t/foreach-ingest-processor-conditional-append-processor/216884/2
但是我对无痛脚本的理解还不够,无法解决这个问题。
如果你有一个具体的数组字段(我们称之为list_of_attributes
),你可以使用下面的脚本处理器:
PUT _ingest/pipeline/bool_converter
{
"description": "Trims and lowercases all string values",
"processors": [
{
"script": {
"source": """
ctx.list_of_attributes = ctx.list_of_attributes.stream()
.map(str -> str == 'on' ? true : false)
.collect(Collectors.toList())
"""
}
}
]
}
然后在您摄取文档时应用它:
POST your-index/_doc?pipeline=bool_converter
{
"list_of_attributes": ["on", "on", "off"]
}
如果您有多个这样的数组字段,您可以通过调整
不要脸的外挂:我奉献一个whole chapter to ingesting & pipelines in my recently released Elasticsearch Handbook。如果您是 ES 的新手,请尝试一下!