====== 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"
}
}
}
]
}