我正在使用PutElasticsearch5处理器将文档索引到ES.My工作流在PutElasticsearch5之前有几个其他处理器将avro转换为json。
运行工作流程时出现以下错误。
java.lang.IllegalArgumentException:验证失败:1:缺少内容类型; 2:缺少内容类型;
我找不到任何其他重要信息来解决这个问题。 Putelasticsearch5配置
下没有“内容类型”设置答案 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),这是不可取的。