2017-09-13 194 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