Nifi:PutSolrContentStream不评估EL

时间:2017-09-13 13:24:37

标签: solr el apache-nifi

我使用UpdateAttribute处理器为我的流文件添加一个属性(solrCoreSuffix),值为" test"。然后,在我的PutSolrContentStream处理器中,我将Solr Location属性设置为:" http://localhost:8983/solr/mycore- $ {solrCoreSuffix}"。我希望Solr处理器能够尝试进入" http://localhost:8983/solr/mycore-test"但是,如日志中所述,它会尝试访问" http://localhost:8983/solr/mycore-"。

这个字段有"支持表达式语言:true",我在查看队列中的flowfile时可以看到我的属性值正确,我可以在PutFile等其他处理器上使用这个属性,例如,字段&# 34;收集和#34;有同样的意外行为。

我不知道我在这里做错了什么,我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

Solr Location字段支持表达式语言,但不支持按流文件。

这意味着当处理器启动时,它正在创建SolrClient(来自SolrJ)并根据环境变量,变量注册表等评估Solr Location的值,但此时没有流文件使用流文件属性。这允许某人根据dev / qa / prod等环境轻松地将Solr位置外部化。

以这种方式完成的原因是因为创建一个新的Solr连接对于任何单个流文件来说都是昂贵的。

在云模式下,该集合不是Solr Location的一部分,并且是动态的,因为CloudSolrClient允许您为每个操作指定集合:

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-solr-bundle/nifi-solr-processors/src/main/java/org/apache/nifi/processors/solr/PutSolrContentStream.java#L178

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-solr-bundle/nifi-solr-processors/src/main/java/org/apache/nifi/processors/solr/PutSolrContentStream.java#L203-L205