获取 Elasticsearch 响应

Getting Elasticsearch response

我正在使用 gin 框架构建一个 Api 以从 Elastic 获取数据。 问题是,当我 运行 应用程序时,我在第一个请求中成功获得响应,但之后在任何后续请求中我收到错误:

Error parsing the response body: EOF

弹性配置:

var cfg = elasticsearch.Config{
    Password:  GetConnectConfig().esPassword,
    Username:  GetConnectConfig().esUserName,
    Addresses: GetConnectConfig().esHost,
    Logger: &estransport.ColorLogger{
        Output:             os.Stdout,
    }

我的请求处理函数如下所示:

func Search() gin.HandlerFunc {

    client, err := elasticsearch.NewClient(cfg)
    if err != nil {
        log.Fatalf("elastic configuration failed %s", err)
    }

    res, err := client.Search(
        client.Search.WithIndex(Index_Name),
        client.Search.WithSize(10),
        client.Search.WithPretty(),
        )
    if err != nil {
        log.Fatalf("elastic failed to respond %s", err)
    }

    return func(c *gin.Context) {
        r := map[string]interface{}{}
        if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err})
            log.Fatalf("Error parsing the response body: %s", err)            // Error 
        } else {
            for _, hit := range r["hits"].(map[string]interface{})["hits"].([]interface{}) {
                log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"])
            }
            c.JSON(http.StatusOK, "success")
        }
    }
}

正如我所说,每次我 运行 应用程序时,我只能在第一个请求中获得响应。 我不确定这里错误的原因是什么。

我还尝试通过添加以下内容在搜索后关闭响应正文:

defer res.Body.Close()

但现在我收到以下错误:

Error parsing the response body: http2: response body closed

defer res.Body.Close()应该在func(c *gin.Context){}里面哟。可以将您的搜索初始化移动到 func 中,并在里面做一个关闭之类的事情,客户端可以作为依赖项在这里注入。

 return func(c *gin.Context) {
          res, err := client.Search(
           client.Search.WithIndex(Index_Name),
           client.Search.WithSize(10),
           client.Search.WithPretty(),
          )
          defer res.Body.Close()
   }
}