API analyzer et option field


(Christophe Boucaut) #1

Bonjour,

Préparant la migration d'ES 1.7 vers ES 2.x, j'ai une erreur dans l'un de mes tests qui vérifie mon analyzer custom via l'API ES dédiée.

Ce que j'ai :

Mon mapping (en version allégée) :

"livre": {
    "properties": {
        "auteur": {
          "type": "string",
          "analyzer": "patronyme"
        }
    }
}

Patronyme correspond à mon analyzer custom qui est placé dans mon index.

Ensuite, je souhaite vérifier que mon analyzer fonctionne correctement, j'envoie donc via l'API :

GET mon_index/_analyze
{
  "field" : "livre.auteur",
  "text" : "d'estas"
}

Sur la version 1.7 d'ES j'obtiens bien ce que j'attends de mon analyzer mais en version 2.4 pas du tout. J'essaye de creuser et un moment j'essaye en ne précisant pas le type mais directement le field comme ceci :

GET mon_index/_analyze
{
  "field" : "auteur",
  "text" : "d'estas"
}

Et dans ce cas, tout est bon. J'en déduis d'après la doc que dans le premier cas il n'a pas trouvé mon analyzer et qu'il a utilisé celui par défaut. Cependant dans la documentation, il précise bien "field" : "obj1.field1". obj1 me semble être le type (donc dans mon cas : livre) et field le champs portant l'analyzer (donc dans mon cas : auteur).

Etant donné que depuis ES 2.0 il me semble que l'on ne peut plus avoir 2 analyzers différents pour un même field d'un type à l'autre, je trouve cela logique qu'il n'y ait plus besoin de préciser le type. Donc ai-je mal compris la documentation ? Y a-t-il eu un couac dans la documentation ? Est-ce que obj1 représente un field avec comme propriété field1 (ce qui ne serait pas super beau au niveau des noms) ?

Merci par avance pour tout éclaircissement que vous pourrez m'apporter.


(David Pilato) #2

Dans l'exemple de la documentation, en gros, on présume que tu as un document:

{
  "obj1": {
    "field1": "xyz"
  }
}

Ce que tu décris est un breaking change de la version 2.0: https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_mapping_changes.html#_type_name_prefix_removed


(Christophe Boucaut) #3

Okey, merci pour la confirmation (je n'étais pas descendu jusqu'en bas de la page de BC ><). Je voulais en être sûr avant de l'appliquer dans mon code.


(system) #4