# Changer le mapping d'un type via Sense

**URL:** <https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733>\
**Category:** Discussions en français\
**Created:** [February 25, 2016, 3:52pm UTC](https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733 "2016-02-25T15:52:09Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rigobert](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@Rigobert](https://discuss.elastic.co/u/Rigobert)\
**Post date:** [February 25, 2016, 3:52pm UTC](https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733/1 "2016-02-25T15:52:09Z")

</div>

Bonjour,

Je suis ce qu'on peut appeler un "newbie" dans le monde Elasticsearch/kibana/Logstash.  
Je m'essaie avec ces outils à partir d'un exemple qui me semble basique : importer les lignes d'un fichier csv.

L'ETL est Logstash  
Le moteur de recherche est elasticsearch  
La présentation se fait via Kibana

Rien d'exceptionnel.

Ma config logstash est la suivante :

```
input {
  file {
	path => ["C:\my_file.csv"]
	start_position => "beginning"
  }
}

filter {
  csv {
    columns => [
		"DepId",
		"DepNumber",
		"DepName",
		"CompanyId",
		"CompanyNumber",
		"CompanyName",
		"RoomId",
		"RoomCode",
		"RoomName",
		"RoomCity",
		"RoomNumber",
		"RoomDay",
		"RoomTime",
	]
    separator => ";"
    remove_field => ["message","host","path"]
  }
}
 
output {
    elasticsearch {
		hosts => ["localhost:9200"]
		index => "my_index"
		document_type => "dep"
  }
  stdout {}
}

```

L'import se fait très bien ... mais lorsque j'utilise Kibana pour présenter différentes statistiques, je constate que les champs ont été indexées avec la notion "analyzed". C'est-à-dire, par exemple, que pour le champ RoomCity, une valeur comme Boulogne-Sur-Mer est considéré en 3 termes "Boulogne" "Sur" "Mer".

J'aimerais forcer l'index à not\_analyzed sur différents champs. Quelle requête dois-je effectuer via la webapp Sense pour modifier ce mapping (je n'ai pas curl).

Pour information, lorsque j'exécute GET /my\_index/dep/\_mapping, j'obtiens :

```
{
  "my_index": {
    "mappings": {
      "dep": {
        "properties": {
          "@timestamp": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis"
          },
          "@version": {
            "type": "string"
          },
          "CompanyId": {
            "type": "string"
          },
          "CompanyName": {
            "type": "string"
          },
          "CompanyNumber": {
            "type": "string"
          },
          "RoomDay": {
            "type": "string"
          },
          "RoomId": {
            "type": "string"
          },
          "RoomTime": {
            "type": "string"
          },
          "RoomCity": {
            "type": "string"
          },
          "RoomCode": {
            "type": "string"
          },
          "RoomName": {
            "type": "string"
          },
          "RoomNumber": {
            "type": "string"
          },
          "DepId": {
            "type": "string"
          },
          "DepName": {
            "type": "string"
          },
          "DepNumber": {
            "type": "string"
          }
        }
      }
    }
  }
}

```

Merci d'avance.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 25, 2016, 5:24pm UTC](https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733/2 "2016-02-25T17:24:10Z")

</div>

Le template par défaut de logstash fait ça. Il ajoute des sous-champs `raw` qui sont non analysés. Cela permet de répondre typiquement au problème des noms des villes.

Mais il ne fonctionne que si ton index se nomme `logstash-*`.

Du coup, là, je te conseille de copier le template et le modifier puis d'utiliser les champs `template` et `template_name` de l'output elasticsearch.

[https://github.com/logstash-plugins/logstash-output-elasticsearch/blob/master/lib/logstash/outputs/elasticsearch/elasticsearch-template.json](https://github.com/logstash-plugins/logstash-output-elasticsearch/blob/master/lib/logstash/outputs/elasticsearch/elasticsearch-template.json)

J'ai rédigé un blog post qui à un moment décrit l'usage d'un template propre à son besoin: [http://david.pilato.fr/blog/2015/12/10/building-a-directory-map-with-elk/](http://david.pilato.fr/blog/2015/12/10/building-a-directory-map-with-elk/)

---

<div class="post-metadata">

**Author:** ![Rigobert](https://avatars.discourse-cdn.com/v4/letter/r/b487fb/32.png) [@Rigobert](https://discuss.elastic.co/u/Rigobert)\
**Post date:** [February 26, 2016, 8:38am UTC](https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733/3 "2016-02-26T08:38:29Z")

</div>

Merci David.  
J'ai relancé un import avec logstash en utilisant un index de type logstash-\*.

Dans l'onglet "Discover" de Kibana, lorsque je clique sur le field RoomCity, je pré-visualise (top 5 des valeurs) correctement les valeurs de type "Boulogne-sur-Mer" ... mais lorsque je veux visualiser (clique sur Visualize) ce field spécifique, j'obtiens le pop-up d'erreur suivant :

```
Error: Request to Elasticsearch failed: {"error":{"root_cause":[{"type":"exception","reason":"java.lang.IllegalStateException: Field data loading is forbidden on RoomCity"}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"logstash-2016.02.26","node":"TLrvWCWhQrC2jfPka280MQ","reason":{"type":"exception","reason":"java.lang.IllegalStateException: Field data loading is forbidden on RoomCity","caused_by":{"type":"unchecked_execution_exception","reason":"java.lang.IllegalStateException: Field data loading is forbidden on RoomCity","caused_by":{"type":"illegal_state_exception","reason":"Field data loading is forbidden on RoomCity"}}}}]}}
    at http://localhost:5601/bundles/kibana.bundle.js?v=9693:80074:39
    at Function.Promise.try (http://localhost:5601/bundles/commons.bundle.js?v=9693:61110:23)
    at http://localhost:5601/bundles/commons.bundle.js?v=9693:61079:31
    at Array.map (native)
    at Function.Promise.map (http://localhost:5601/bundles/commons.bundle.js?v=9693:61078:31)
    at callResponseHandlers (http://localhost:5601/bundles/kibana.bundle.js?v=9693:80046:23)
    at http://localhost:5601/bundles/kibana.bundle.js?v=9693:79553:17
    at processQueue (http://localhost:5601/bundles/commons.bundle.js?v=9693:42356:29)
    at http://localhost:5601/bundles/commons.bundle.js?v=9693:42372:28
    at Scope.$eval (http://localhost:5601/bundles/commons.bundle.js?v=9693:43600:29)

```

Et donc rien ne s'affiche de manière graphique.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 26, 2016, 3:54pm UTC](https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733/4 "2016-02-26T15:54:23Z")

</div>

Je pense que ça vient de ça: [https://github.com/elastic/elasticsearch/issues/15267#issuecomment-163657397](https://github.com/elastic/elasticsearch/issues/15267#issuecomment-163657397)

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:49pm UTC](https://discuss.elastic.co/t/changer-le-mapping-dun-type-via-sense/42733/5 "2017-07-06T13:49:19Z")

</div>


