ElasticSearch не может распознать заголовок Context-Type с определенной кодировкой
Я потратил некоторое время, пытаясь исправить предупреждение о массовой загрузке эластичного поиска:
Определение типа контента для запросов на отдых не рекомендуется. Укажите тип содержимого с помощью заголовка [Content-Type]
Мой запрос ниже:
POST http://elasticserver/_bulk HTTP/1.1
Authorization: xxx
Content-Type: application/x-ndjson; charset=utf-8
Host: elasticserver
Content-Length: 8559
... new line delimited json content ...
И мой действительный ответ со статусом 200 ниже:
HTTP/1.1 200 OK
Warning: 299 Elasticsearch-5.5.1-19c13d0 "Content type detection for rest requests is deprecated. Specify the content type using the [Content-Type] header." "Mon, 14 Aug 2017 00:46:21 GMT"
content-type: application/json; charset=UTF-8
content-length: 4183
{"took":5538,"errors":false,...}
Экспериментируя, я обнаружил, что проблема заключается в определении кодировки типа контента Content-Type: application/x-ndjson; charset=utf-8
и если я изменю это на Content-Type: application/x-ndjson
Я не получаю предупреждения.
Это проблема эластичного поиска или я неправильно формирую запрос?
1 ответ
Официальная документация прямо заявляет, что
При отправке запросов в эту конечную точку заголовок Content-Type должен быть установлен на application/x-ndjson.
RestController
Исходный код также показывает, что они игнорируют кодировку:
final String lowercaseMediaType = restRequest.header("Content-Type").toLowerCase(Locale.ROOT);
// we also support newline delimited JSON: http://specs.okfnlabs.org/ndjson/
if (lowercaseMediaType.equals("application/x-ndjson")) {
restRequest.setXContentType(XContentType.JSON);
return true;
}