首页 > 解决方案 > 通过 node-red 嵌套 elasticsearch GET 请求

问题描述

我在 CentOs 7 机器上运行了 elasticsearch 6.7,并且从我尝试查询弹性搜索的地方运行了 node-red。

当我需要将数据 POST 到服务器,或者当我需要执行简单的 GET _search 查询时,使用 httprequest 节点(节点红色)非常有用,我可以简单地在 url 中发送参数,例如:

http://xxx.xxx.xxx.xxx:9200/data/default/_search?size={{{size}}}&from={{{from}}}&q=sensor:temp

用一个简单的流程:节点红色 GET 流

本问题所述。

但是,如果我需要具有嵌套参数的更复杂的查询,我将无法通过 url 使用参数执行它。例如,我将如何使用 node-red 中的 httprequest 节点制作此 cURL GET:

 curl -XGET "http://xxx.xxx.xxx.xxx:9200/data/default/_search" -H 'Content-Type: application/json' -d'
 {
   "size": 0,
   "query": {
     "range":{
       "created":{
         "gte":"2019-03-11",
         "lte":"2019-03-12"
       }
     }
   }, 
   "aggs": {
     "status_terms": {
       "terms": {
         "field": "device.keyword"
       },
       "aggs": {
         "status_stats": {
           "stats": {
             "field": "value"
           }
         }
       }
     }
   }
 }'

标签: elasticsearchnode-red

解决方案


请注意,您可以将查询字符串中的整个正文作为参数发送。

它看起来像这样:

curl -XGET 'http://xxx.xxx.xxx.xxx:9200/data/default/_search?source_content_type=application/json&source={"size":0,"query":{"range":{"created":{"gte":"2019-03-11","lte":"2019-03-12"}}},"aggs":{"status_terms":{"terms":{"field":"device.keyword"},"aggs":{"status_stats":{"stats":{"field":"value"}}}}}}'

推荐阅读