如何替换InvokeHTTP的POST查询的特定值?

时间:2017-09-07 15:21:46

标签: apache-nifi

我有以下处理器序列:

enter image description here

我使用ReplaceText处理器创建POST查询的主体。此处理器已链接到InvokeHTTPReplaceText中的替换值为:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {"term": {"Field1": ""}},
        {"term": {"Field2": ""}},
        {"term": {"Field3": ""}},
        {"term": {"Field4": ""}}
      ]
    }
  },
  "aggs": {
    "range": {
        "date_range": {
            "field": "Datetime",
            "ranges": [
                { 
                   "from": "2017-02-17T16:00:00Z||-1H/H",
                   "to": "2017-02-17T16:00:00Z||/H" 
                }
            ]
        }
    }
  }
}

InvokeHTTP执行查询之前,我需要根据以下内容的值替换Field1Field2Field3Field4的值。输入FlowFile的实际字段(UpdateAttribute的输出)。

例如,在输入FlowFile中,Field1等于ABC,因此在我的POST查询中Field1应该等于ABC而不是空字符串。

最好的办法是什么?

2 个答案:

答案 0 :(得分:4)

您可以在ReplaceText中使用NiFi Expression Language。假设您有4个属性field.1到field.4,您可以使用以下内容替换整个文本:

str

答案 1 :(得分:1)

您可以使用ReplaceText使用正则表达式来匹配字段定义,并将其替换为属性的值。不幸的是,将Expression Language参数化以重复每个数字会有点棘手,因此明确定义它们会更好:

  • 搜索值"Field1"\: ""
  • 替换值"Field1": "${field1}"