Apache nifi 如何将POST查询的特定值替换为InvokeHTTP?
我有以下处理器序列: 我使用Apache nifi 如何将POST查询的特定值替换为InvokeHTTP?,apache-nifi,Apache Nifi,我有以下处理器序列: 我使用ReplaceText处理器创建POST查询主体。此处理器链接到InvokeHTTP。 ReplaceText中的替换值为: { "size": 0, "query": { "bool": { "filter": [ {"term": {"Field1": ""}}, {"term": {"Field2": ""}}, {"term": {"Field3": ""}}, {"
ReplaceText
处理器创建POST查询主体。此处理器链接到InvokeHTTP
。
ReplaceText
中的替换值为:
{
"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
中的查询之前,我需要根据输入流文件的实际字段值(输出UpdateAttribute
)替换Field1
、Field2
、Field3
和Field4
)的值
例如,在输入流文件中,我的Field1
等于ABC
,因此在我的后期查询中Field1
应该等于ABC
,而不是空字符串
最好的方法是什么?您可以在文本中使用。假设您有4个属性字段.1到字段.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
使用正则表达式匹配字段定义,并用属性值替换它们。不幸的是,参数化要重复每个数字会有点棘手,因此最好明确定义它们:
- 搜索值:
“Field1\:”
- 替换值:
“Field1”:“${Field1}”
ListenHTTP
,它输出带有此内容的流文件{“field1”:“AAA”,“field2”:“BBB”,“field3”:“CCC”}
。就在ListenHTTP
之后,我添加了UpdateAttribute
,并相应地创建了属性field1
、field2
和field3
,其值分别为${field1}
、${field2}
和${field3}
。但是,当我按照您的建议在POST查询中设置{“term”:{“Field1”:“${Field1}”},
时,所有字段都是空的。我遗漏了什么?您的字段在内容中,而不是在属性中,因此您不能使用表达式语言引用它们。要使它们脱离JSON并进入属性,请使用EvaluateJsonPath。您将拥有一个名为“field1”的动态属性,其值为JSON路径“/field1”,其余字段也是如此。EvaluateJSONPath将替换流中的UpdateAttribute。