Foreach 嵌套字段并不总是存在



>我正在尝试从文档内的数组中摄取网页的内容

{ "myDocument" :  { 
"author" : "Joe",
......
"linkedPages" : [
{ "name" : "googly",
"creator" : "SoInSo",
"url": "http://blah.com/content",
"pageContent" : "Base64EncodedStuff...."
},
......
],
"tags" : [
....
]
}

并且正在使用摄取管道

PUT _ingest/pipeline/attachment
{
"description" : "Extract attachment information from arrays",
"processors" : [
{
"foreach": {
"field": "linkedPages",
"processor": {
"attachment": {
"target_field": "_ingest._value.readableAndSearchable",
"field": "_ingest._value.pageContent",
"ignore_failure" : true
}
}
}
}
]
}

这工作正常,甚至可以绕过页面Conent字段中的错误数据。现在的问题是链接页面字段是可选的。 如果我发送的文档没有任何链接页面,Elasticsearch 会抛出一个 IllegalArgumentException。 我正在将 ObjectMapper 序列化包含设置为 Inclusion.NON_NULL这很好地从 JSON 中删除了大量空字段,但在这种情况下会导致错误。

Foreach 处理器是否可以忽略故障?

这里晚了几年,但从版本 6.4 开始,您可以像这样为foreach处理器指定ignore_missing配置选项:

PUT _ingest/pipeline/attachment
{
"description" : "Extract attachment information from arrays",
"processors" : [
{
"foreach": {
"field": "linkedPages",
"processor": {
"attachment": {
"target_field": "_ingest._value.readableAndSearchable",
"field": "_ingest._value.pageContent",
"ignore_failure" : true
}
},
"ignore_missing": true
}
}
]
}

此方法应通过跳过未指定linkedPages字段的所有情况来避免您遇到的错误。

相反,如果您希望发生故障,但又想忽略它,则可以在 6.5 版的foreach处理器上指定ignore_failure选项。

此外,如果您希望允许失败,但将错误作为管道的一部分进行处理,则可以在on_failure配置选项中指定处理器数组(从 6.5 开始也可用(。

相关文档:

https://www.elastic.co/guide/en/elasticsearch/reference/6.5/foreach-processor.html https://www.elastic.co/guide/en/elasticsearch/reference/6.5/handling-failure-in-pipelines.html

最新更新