====== Les Dynamic_templates dans le Mapping d'Elasticsearch ====== ATTENTION ce qui est ecrit sur cette page n'est pas parole d'evangile, ce sont des notes, en cours de test... ===== Ressources ===== * [[https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html|Doc officielle sur le Dynamic Templates[ENG]]] * [[https://www.supinfo.com/articles/single/2606-templates-dynamiques-elasticsearch|Les templates dynamiques - Elasticsearch[FR]]] ===== Créer un Index est définir son Mappage en même temps ===== Dans l'exemple ci dessous on créé un index nommé ''test'' et on defini son mapping avec un Dynamic_tamplates de façon a ce que * toute valeur dont le nom commence par un 'k' soit considéré comme un KEYWORD * toute valeur dont le nom commence par un 's' soit considéré comme un TEXT J'ai volontairement alignés les ''{}'' et les ''[]'' car il y a une subtilité dans le tableau ''"dynamic_templates"'' il doit etre sous la forme "dynamic_templates": [ { "truc": {..} } , { "machin":{..} } ] et NON PAS sous cette forme "dynamic_templates": [ "truc": {..} , "machin":{..} ] concentrez-vous sur les **{}** [ { "truc": {..} } ] => [ "truc": {..} ] Je me permet d'insister sur le point ci-dessus, parce j'en ai personnellement ch... à trouver d'ou venez cette erreur "type": "mapper_parsing_exception", "reason": "A dynamic template must be defined with a name" PUT test { "mappings": { "_doc": { "dynamic_templates": [ { "keywords": { "match": "k*", "mapping": { "type": "keyword" } } }, { "strings": { "match": "s*", "mapping": { "type": "text" } } } ] } } } ===== Modifier un Dynamic_templates ===== Dans le cas ou un Dynamic_templates est déjà défini dans le mapping, pour le modifier on utilise le code suivant Avec ''PUT %INDEX%/_mapping/%TYPE%'' PUT test/_mapping/_doc { "dynamic_templates": [ { "keywords": { "match": "k*", "mapping": { "type": "text" } } } ] }