我想从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)。我确定结果不是空集,因为我使用curl测试了此查询。

我的方法有什么问题?我应该以其他方式定义HTTP Method吗?

最佳答案

对于POST,PUT和PATCH之类的动词,通常会将上述JSON正文作为流文件的内容,然后将其传递给InvokeHttp,并在其中设置正确的动词和URL。但是,InvokeHttp文档指出,将不会为GET动词发送消息正文。

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

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

关于http - 如何使用InvokeHTTP从Apache Nifi执行ElasticSearch agg查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46078792/

10-09 20:01