본문으로 바로가기

1. 현상

  • CLI(Command-line interface) 환경에서 ES 서버에 REST API 활용하여 데이터 처리 시 나타나는 에러
  • 4xx에러로 클라이언트의 문제입니다. 
# curl -X GET \
-d '{"query": {"match": {"name": "jk"}}}' \
localhost:9200/stock_sale_log/_search | jq

{
  "error": "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status": 406
}

2. 원인

  • 엄격한 콘텐츠 유형 검사
  • Elasticsearch 6.0부터 본문을 포함하는 모든 REST 요청은 해당 본문에 대한 올바른 콘텐츠 유형도 제공해야 합니다.

3. 해결

  • REST API 데이터를 주고받는 경우 헤더에 Content-Type을 알맞게 지정해야 합니다.
  • curl의 H옵션을 사용하여 헤더에 알맞은 Content-Type을 추가합니다.
  • -H "Content-Type: application/json"
# curl -X GET \
-H "Content-Type: application/json" \
-d '{"query": {"match": {"name": "jk"}}}' \
localhost:9200/stock_sale_log/_search | jq

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.9808291,
    "hits": [
      {
        "_index": "stock_sale_log",
        "_type": "_doc",
        "_id": "ZaW-Yn4BKwQ-4NCaaclg",
        "_score": 0.9808291,
        "_source": {
          "name": "jk",
          "sale_type": "sell",
          "ticker": "aapl",
          "price": 178,
          "cnt": 10,
          "time": "2022-01-05 18:20:20"
        }
      }
    ]
  }
}