2017-08-22 3 views
0

J'ai installé les conteneurs Docker pour Elasticsearch 5.5.2 et Kibana. J'ai commencé à en apprendre davantage sur les types de cartographie, et créé un index avec le code suivant par xcurl:Echec du mappage de base Elasticsearch

{ 
    "mappings": { 
    "user": { 
     "_all":  { "enabled": false }, 
     "properties": { 
     "title": { "type": "text" }, 
     "name":  { "type": "text" }, 
     "age":  { "type": "integer" } 
     } 
    } 
} 

L'indice a été créé avec succès et j'ai décidé d'insérer des données. Lorsque j'essaie d'ajouter une chaîne dans un champ entier i.e. {"age": "hello"}, Elastic affiche une erreur (cela signifie que les mappages fonctionnent correctement). Le problème est avec d'autres types de données:

1.Il accepte les entiers et les flottants dans les champs de chaînes (je pense que cela pourrait être dû aux lancers implicites).

2.It accepte comme flotteurs 22.4 dans le domaine age (quand je recherche avec Kibana ou xcurl le contenu du champ age est représenté comme flottant et non comme un entier, cela signifie ne pas faire est de moulages à flotteur entier)

Qu'est-ce que je fais de mal?

+0

Pouvez-vous nous dire comment vous insérez les documents? – aclokay

+0

Pour la première partie de votre question; '22.2' est une chaîne parfaitement valide. Les chaînes ne sont pas des lettres ordinaires, ça peut être n'importe quoi. La différence est qu'un champ 'text' est analysé et segmenté différemment des autres champs. – MatsLindh

+0

@aclokay 'curl -XPOST localhost: 9200/mon_index/utilisateur -d '{" title ":" Un titre "," nom ":" nom d'utilisateur "," age ": 223.5}'' et renvoie '{ "_index": "my_index", "_type": "user", "_id": "AV4JO3pZh8gyIWsivJ6d", "_version": 1, "résultat": "créé", "_Les éclats": { " total »: 2, "succès": 1, "a échoué": 0} , "créé": true} ' – Marco

Répondre

1

Avez-vous essayé de désactiver la coercition? Il peut être fait au niveau du terrain:

{ 
    "mappings": { 
     "user": { 
     "_all":  { "enabled": false }, 
     "properties": { 
      "title": { "type": "text" }, 
      "name":  { "type": "text" }, 
      "age":  { "type": "integer", 
         "coerce": false} 
     } 
     } 
    } 

Ou au niveau de l'index pour tous les domaines:

"settings": { 
     "index.mapping.coerce": false 
    }, 
    "mappings": { 
    ... 
+0

Ça s'est bien passé. Merci @Imma :) – Marco