0

J'ai passé un certain temps à essayer de corriger l'avertissement de transfert groupé de recherche élastique:ElasticSearch est incapable de reconnaître en-tête Contexte-type avec le codage défini

détection du type de contenu pour les demandes de repos est dépréciée. Spécifiez le type de contenu en utilisant l'en-tête

Ma demande [Content-Type] est ci-dessous:

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 ... 

Et ma réponse valide avec 200 statut est ci-dessous:

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,...} 

En expérimentant I découvert que le problème est dans la définition de charset de type de contenu Content-Type: application/x-ndjson; charset=utf-8 et si je le change en Content-Type: application/x-ndjson je ne reçois aucun avertissement.

Est-ce un problème de recherche élastique ou je ne fais pas la demande correctement?

Répondre

0

Le official documentation déclare expressément que le

Lors de l'envoi de requêtes à ce point de terminaison l'en-tête Content-Type doit être réglé à l'application/x-ndjson.

Le RestController source code montre aussi qu'ils ne tiennent pas compte du charset:

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; 
}