elasticsearch NiFi putelasticsearch5错误-缺少内容类型,elasticsearch,apache-nifi,elasticsearch,Apache Nifi" /> elasticsearch NiFi putelasticsearch5错误-缺少内容类型,elasticsearch,apache-nifi,elasticsearch,Apache Nifi" />

elasticsearch NiFi putelasticsearch5错误-缺少内容类型

elasticsearch NiFi putelasticsearch5错误-缺少内容类型,elasticsearch,apache-nifi,elasticsearch,Apache Nifi,我正在使用PutElasticsearch5处理器将文档索引为ES。在将avro转换为json的PutElasticsearch5之前,我的工作流还有几个其他处理器 当我运行工作流时,我得到以下给定错误 java.lang.IllegalArgumentException:验证失败:1:缺少内容类型;2:缺少内容类型 我找不到任何其他相关信息来解决这个问题。PutellasticSearch5配置下没有“内容类型”的设置,我也有这个问题,就像user2297083所说的,如果你向Putellas

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

当我运行工作流时,我得到以下给定错误

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


我找不到任何其他相关信息来解决这个问题。PutellasticSearch5配置下没有“内容类型”的设置,我也有这个问题,就像user2297083所说的,如果你向PutellasticSearch5发送一个成批JSON文件,那么它会抛出这个异常并将文件移动到失败的关系中。处理器似乎一次只处理写入文件中的一个JSON对象,不能用数组括号括起来。因此,如果您有一个包含以下内容的文件:

[{“键”:“值”}]

但是,如果您发送与以下相同的文档,则处理器将失败:

{“键”:“值”}

然后,考虑到您的其他配置是正确的,处理器将成功索引

一种解决方案可以是,如果您不想在到达PutElasticsearch5处理器之前通过拆分器发送所有数据,那么使用一个拆分器处理器,该处理器可以消除与PutElasticsearch5的故障关系,并将数据发送回同一个PutElasticsearch5。更多的流文件意味着节点中有更多的IO,因此我正在积极寻找一种让PutellasticSearch5处理器处理成批JSON文档的方法。我觉得应该有一种方法,不用编写自定义的迭代或创建大量新的流文件

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

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

当我运行工作流时,我得到以下给定错误

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

这正是PutellasticSearch5处理器在传递格式不正确的JSON文件时给出的异常消息。他的问题是为什么会发生这种情况

我的回答说明了它发生的原因(一个可能的用例)以及如何通过给出一个可行的解决方案来解决它

在本例中,格式正确的JSON意味着一个流文件,它的内容只有一个JSON对象,如我上面所示

但进一步研究,处理器一次只获取一个JSON文档流文件是有意义的,因为您可以使用流文件属性来指定索引文档的“id”。如果使用了流文件的uuid,并且它是批处理JSON,即

[{“一”:1}、{“二”:2}、{“三”:3}]


然后,每个JSON对象将在elasticsearch中使用相同的“索引”、“类型”和“id”(id是FlowFile uuid)进行索引,这是不需要的。

您能否共享您的
flow.xml.gz
文件(编辑凭证等敏感值)错误的完整堆栈跟踪?有没有可能有空的流文件进入PutElasticsearch5?我使用PutElasticsearch5遇到了同样的问题。如果我暂停处理器并检查它的队列,流文件肯定不是空的。你有没有找到解决这个问题的方法?如果我没记错的话,那是因为向PutellasticSearch5发送了大量数据。我在前面添加了一个拆分处理器,然后它就可以工作了,它确实回答了这个问题。他的问题是关于例外的,它确实回答了这个问题。看见