Foreach嵌套字段并不总是存在

时间:2017-08-04 15:20:54

标签: elasticsearch

我试图从文档中的数组中摄取网页的内容

{ "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
          }
        }
      }
    }
  ]
}

这样可以正常工作,甚至可以在pageConent字段中查找错误数据。现在的问题是linkedPages字段是可选的。如果我在没有任何linkedPages的情况下发送文档,则Elasticsearch会抛出IllegalArgumentException。 我将ObjectMapper serializationInclustion设置为Inclusion.NON_NULL,它可以很好地从JSON中删除大量空字段,但在这种情况下会导致错误。

Foreach处理器有没有忽略失败?

1 个答案:

答案 0 :(得分:0)

这里晚了几年,但从6.4版开始,您可以像这样为dispatch_async(dispatch_get_main_queue(), ^{ [NSObject cancelPreviousPerformRequestsWithTarget:self]; }); 处理器指定ignore_missing配置选项:

foreach

此方法应跳过所有未指定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版开始指定ignore_failure选项。

此外,如果您希望允许失败但将错误作为流水线的一部分来处理,则可以在foreach配置选项(自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