NiFi putelasticsearch5错误 - 缺少内容类型

时间:2017-06-28 19:13:51

标签: elasticsearch apache-nifi

我正在使用PutElasticsearch5处理器将文档索引到ES.My工作流在PutElasticsearch5之前有几个其他处理器将avro转换为json。

运行工作流程时出现以下错误。

java.lang.IllegalArgumentException:验证失败:1:缺少内容类型; 2:缺少内容类型;

我找不到任何其他重要信息来解决这个问题。 Putelasticsearch5配置

下没有“内容类型”设置

1 个答案:

答案 0 :(得分:1)

我也遇到过这个问题,比如user2297083表示如果要将批量JSON文件发送到PutElasticsearch5,那么它会抛出此异常并将文件移动到FAILED关系中。处理器似乎只处理一个写入文件的JSON对象,该对象不能被数组括号包围。因此,如果您的文件包含以下内容:

[{"key":"value"}]

然后处理器将失败但是如果您发送相同的文档:

{"key":"value"}

然后处理器将成功编制索引,考虑到其他配置是否正确。

如果您不想在进入PutElasticsearch5处理器之前通过拆分器发送所有内容,那么可以使用一个解决方案,然后使用分离器处理器,该处理器与PutElasticsearch5的FAILURE关系起作用并将数据发送回相同的PutElasticsearch5。更多FlowFiles意味着您的节点中有更多IO,因此我正在积极寻找让PutElasticsearch5处理器处理批量JSON文档的方法。我觉得无需编写自定义迭代或创建大量新FlowFiles就可以了。

编辑: 实际上,它确实回答了这个问题。他的问题是:

  

我正在使用PutElasticsearch5处理器将文档索引到ES.My工作流在PutElasticsearch5之前有几个其他处理器将avro转换为json。

     

运行工作流程时出现以下错误。

     

java.lang.IllegalArgumentException:验证失败:1:缺少内容类型; 2:缺少内容类型;

这正是PutElasticsearch5处理器在传递未正确格式化的JSON文件时给出的异常消息。他的问题是为什么会这样。

我的回答说明了它为什么会发生(一个可能的用例)以及如何通过提供有效的解决方案来解决它。

在这种情况下,正确格式化的JSON意味着FlowFile具有单个JSON对象,因为它的内容如上所示。

进一步研究这一点,有意义的是,处理器一次只采用一个JSON文档FlowFile,因为您可以使用FlowFile属性来指定" id"索引文件的。如果使用FlowFile的uuid并且它是批量JSON,即

[{"one":1},{"two":2},{"three":3}]

然后每个JSON对象将使用相同的"索引","类型"和" id"在elasticsearch中编入索引。 (id是FlowFile uuid),这是不可取的。