L'en-tête Content-Type [application / x-www-form-urlencoded] n'est pas pris en charge sur Elasticsearch

135

J'avais ElasticSearch 5.2, et je viens de passer à la version 6.0.

J'essaie de créer un modèle d'index en suivant le guide ici , mais j'ai une erreur

Content-Type header [application/x-www-form-urlencoded] is not supported

Ma requête est

curl -X PUT localhost:9200/_template/template_1 -d '
{
  "index_patterns": ["te*", "bar*"],
  "mappings": {
    "type1": {
      "properties": {
        "host_name": {
          "type": "keyword"
        }
      }
    }
  }
}'
Barry Leishman
la source

Réponses:

244

Pour résoudre ce problème, ajoutez l'option curl -H 'Content-Type: application/json'


Cette erreur est due à une vérification stricte du type de contenu introduite dans ElasticSearch 6.0, comme expliqué dans cet article

À partir d'Elasticsearch 6.0, toutes les demandes REST qui incluent un corps doivent également fournir le type de contenu correct pour ce corps.

kgf3JfUtW
la source
Salut @sam, Y a-t-il une solution permanente pour ne pas avoir à donner cet indicateur à chaque demande.
Rupesh
1
@sam remercie sam cependant lorsque j'ajoute l'option curl, cela me donne {"error": "L'en-tête Content-Type [application / x-www-form-urlencoded] n'est pas pris en charge", "status": 406} curl: (6) Impossible de résoudre l'hôte: application
haneul kim
2
@haneulkim Si vous exécutez curl sous Windows, vous devez utiliser des guillemets doubles au lieu de guillemets simples. Voici un exemple de commande curl sous Windows: curl -X PUT "localhost: 9200 / customer / _doc / 1? Pretty" -H "Content-Type: application / json" -d "{\" name \ ": \" John Doe \ "}"
Kevin Le
11

La solution est d'ajouter Content-Type: application/json tête

curl -XPUT 'localhost:9200/_template/template_1' \
  -H 'Content-Type: application/json' \
  -d '**your query**'
Z.LI
la source
-1
"{ \"name\": { \"first\": {} }, \"address\": [ { \"address1\":\"lane\" } ] } "

Sous Windows, lorsque vous indiquez JSON comme paramètre, utilisez uniquement des guillemets doubles. Utilisez le caractère d'échappement.

charlie9526
la source