2017-09-13 69 views
0

我使用值为“test”的UpdateAttribute处理器向我的流文件添加属性(solrCoreSuffix)。然后,在我的PutSolrContentStream处理器中,我将Solr Location属性设置为:“http://localhost:8983/solr/mycore- $ {solrCoreSuffix}”。我期望Solr处理器尝试访问“http://localhost:8983/solr/mycore-test”,但如日志中所述,它尝试访问“http://localhost:8983/solr/mycore-”。Nifi:PutSolrContentStream不评估EL

此字段具有“支持表达式语言:真”,我可以在检查队列中的flowfile时看到我的属性具有正确的值,我可以在PutFile等其他处理器上使用此属性,字段“Collection”具有相同的意外行为。

我没有看到我在这里做错了什么,我错过了什么?

回答

2

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

这意味着当处理器启动时,它会创建一个SolrClient(从SolrJ开始),并根据环境变量,变量注册表等评估Solr Location的值,但此时没有流文件。有时间使用流文件属性。这使得某人可以基于像dev/qa/prod这样的环境轻松地对Solr Location进行外部化。

有人做过这样的原因是因为这将是创建该进来过单流文件到Solr一个新的连接昂贵。

在云计算模式下,收集不是Solr的位置的一部分,并且是动态的,因为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