카테고리 없음

Elastic search에 C++로 데이터 입력시에 발생한 문제 1

MAKGA 2024. 1. 5. 09:17
320x100

Elastic search에 C++ http client로 데이터를 밀어넣었을 때,

첫 번째 Post는 정상이였고, 그 이후부터 다음과 같은 에러가 발생했다.

 

{
  "error": {
    "root_cause": [
      {
        "type": "content_type_header_exception",
        "reason": "java.lang.IllegalArgumentException: only one Content-Type header should be provided"
      }
    ],
    "type": "content_type_header_exception",
    "reason": "java.lang.IllegalArgumentException: only one Content-Type header should be provided",
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "only one Content-Type header should be provided"
    }
  },
  "status": 400
}

 

헤더를 한번만 제공해야된다는 얘기인데 내가

HTTPClient::HeadersMap requestHeaders.insert({ "Content-Type", "application/json" });
httpclient.Post(std::format("http://{0}:{1}/{2}/_doc", m_ip, m_port, "document"), RequestHeaders, _data, _length, response);

 

외에 데이터를 추가로 넣은 줄 알았다.

근데 Post 요청마다 담은 헤더가 문제였다.

 

Post를 한번 보냈으면 다음부터는 

if (m_isFirst)
{
    HTTPClient::HeadersMap requestHeaders;
    requestHeaders.insert({ "Content-Type", "application/json" });
    HTTPClient::HttpResponse response;
    httpclient.Post(std::format("http://{0}:{1}/{2}/_doc", m_ip, m_port, "document"), RequestHeaders, _data, _length, response);
    m_isFirst = false;
}
else
{
    HTTPClient::HeadersMap requestHeaders;
    HTTPClient::HttpResponse response;
    httpclient.Post(std::format("http://{0}:{1}/{2}/_doc", m_ip, m_port, "document"), RequestHeaders, _data, _length, response);
}

 

이렇게 보내야 에러가 안나고 정상적으로 데이터가 추가된다.

320x100