2017-09-07 8 views
1

私は、プロセッサの以下の配列を有する:InvokeHTTPにPOSTクエリの特定の値を代入する方法は?

enter image description here

私は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

でクエリを実行する前に、私は(入力FlowFileの実際のフィールドの値に応じField1Field2Field3Field4の値を交換する必要がありますUpdateAttributeの出力)。クエリField1ではなく空の文字列のABCに等しくなければならない私のPOSTでのよう

例えば、入力FlowFileに私は、ABCに等しいField1持っています。

これを行うにはどうすればよいですか?

答えて

3

ReplaceTextにNiFi Expression Languageを使用できます。あなたは4つの属性がfield.4スルーfield.1持っていると仮定すると、あなたは次のようにテキスト全体を置き換えることができます。

{ 
    "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" 
       } 
      ] 
     } 
    } 
    } 
} 
+0

ありがとうございます。私は一つの事を理解していない。私はこのコンテンツ '{" field1 "、" field2 ":" BBB "、" field3 ":" CCC "}'でFlowFileを出力する 'ListenHTTP'を持っているとしましょう。 'ListenHTTP'の直後に、' UpdateAttribute'を追加して、値 '$ {field1}'、 '$ {field2}'と '$ {field3}'のプロパティ 'field1'、' field2'、 'field3'を作成しました。しかし、 '{" term {: "{Field1": "$ {field1}"}}を設定すると、あなたの提案したPOSTクエリで、すべてのフィールドが空になります。何が欠けていますか? – Dinosaurius

+0

あなたのフィールドはコンテンツではなく、属性にあります。そのため、表現言語を使用してフィールドを参照することはできません。それらをJSONと属性に取り込むには、EvaluateJsonPathを使用します。 "field1"という動的プロパティがあり、値はJSONパス "/ field1"で、残りのフィールドは同じです。 EvaluateJSONPathはあなたのフローのUpdateAttributeを置き換えます。 – mattyb

+0

今それは正常に動作します。 – Dinosaurius

1

あなたはフィールド定義を一致させるために、正規表現を使用するようにReplaceTextを使用し、値に置き換えることができます属性のそれが明示的に定義する方が良いですので、残念ながらすべての番号を繰り返すようにExpression Languageをパラメータには少しトリッキーになります:

  • 検索値"Field1"\: ""
  • 交換値"Field1": "${field1}"
関連する問題