Elasticsearch 응답 받기

지샨

gin 프레임 워크를 사용하여 Elastic에서 데이터를 가져 오는 Api를 구축하고 있습니다. 문제는 응용 프로그램을 실행할 때 첫 번째 요청에서 성공적으로 응답을 얻지 만 후속 요청에서 오류가 발생한다는 것입니다.

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
Kamran

defer res.Body.Close()func (c * gin.Context) {} yo 안에 있어야합니다. 검색 초기화를 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()
   }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사