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"
}
}
]
}
}