如何使用InvokeHTTP从Apache Nifi执行ElasticSearch agg查询?

时间:2017-09-06 15:10:42

标签: http elasticsearch lucene apache-nifi

我想从Apache Nifi执行以下查询:

GET /myindex/_search
{
  "size": 0,
  "aggs": {
    "range": {
        "date_range": {
            "field": "Datetime",
            "ranges": [
                { 
                   "from": "2017-02-17T16:00:00Z||-1H/H",
                   "to": "2017-02-17T16:00:00Z||/H" 
                }
            ]
        }
    }
  }
}

我想获得doc_count的价值。

我尝试使用InvokeHTTP并将上面定义的查询直接粘贴到字段HTTP Method中。我还将Remote URL设置为http://localhost:9200。我将InvokeHTTPPutFile相关联,以便在磁盘上保存响应。关系是Response

当我运行InvokeHTTP时,它不会给我任何错误。但是,它既不输出任何结果(FlowFile for Response)。我确信结果不是空集,因为我使用curl测试了此查询。

我的做法有什么问题?我应该以某种不同的方式定义HTTP Method吗?

2 个答案:

答案 0 :(得分:1)

对于POST,PUT和PATCH等动词,您通常将上述JSON主体作为流文件的内容并将其传递给InvokeHttp,并在其中设置正确的动词和URL。但是,InvokeHttp文档声明不会为GET动词发送消息正文。

好消息是搜索端点的Elasticsearch REST API支持GET和POST。从他们最新的文档:“HTTP GET和HTTP POST都可以用于执行身体搜索。由于并非所有客户端都支持GET与body,因此也允许POST。”

我会将流文件的内容设置为上面的JSON主体(可能使用GenerateFlowFile或ReplaceText),然后使用POST作为动词。

答案 1 :(得分:0)

有一个JsonQueryElasticsearch处理器,它支持JSON elasticsearch查询。

JsonQueryElasticsearch configuration

您的查询进入Query字段。 处理器具有hitsaggregations关系供您处理结果。