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

How to substitute particular values of POST query for InvokeHTTP?

我有以下处理器序列:

我使用 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而不是空字符串。

更好的方法是什么?

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

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

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

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