JDONREFv4 Mappings : Différence entre versions

De JDONREF Wiki
(Le mapping commune)
(Champs "obligatoires")
 
(63 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
JDONREFv3ES introduit différents mapping permettant de gérer des adresses.
+
JDONREFv4 introduit différents mapping permettant de gérer des adresses.
   
C'est l'adresse qui dispose de la plus grande richesse d'information, mais les autres mappings peuvent disposer d'informations qui leurs sont propres (notamment leur géométrie).
+
C'est le POI ou la Zone qui dispose de la plus grande richesse d'information, mais les autres mappings peuvent disposer d'informations qui leurs sont propres (notamment leur géométrie).
   
 
Ils sont fournis dans le plugin sous la forme de fichiers json.
 
Ils sont fournis dans le plugin sous la forme de fichiers json.
   
===== Le type adresse =====
 
  +
===== Quelques informations à lire avant de commencer =====
   
Le type adresse est le plus complet. Sa géométrie est un point, mais pour des raisons pratiques, le type geo_shape est employé. Son mapping est défini de la manière suivante :
 
  +
Les mappings proposés dans cette page ne sont pas obligatoires pour travailler avec la requête JDONREF.
  +
Toutefois, si vous débutez avec elasticsearch, il sera sans doute plus simple de commencer avec les mappings fournis.
  +
  +
Le mapping du type "poizon" peut être appliqué à tous les types, car il est le plus générique (si un champ n'est pas utilisé, cela ne prend pas de place).
  +
Toutefois, pour plus de lisibilité, les mappings de chaque type sont fournis de manière allégée.
  +
  +
Les mappings qui suivent disposent aussi de quelques particularités à connaître pour leur bonne lecture.
  +
  +
* JDONREFv4 se sert de multiples champs pour sa recherche, il est donc important de respecter le nom de ces champs. Les autres sont aussi généralement associés à une adresse mais ne lui sont pas indispensables.
  +
* Le respect des indexs est nécessaire pour le bon usage de la [[JDONREFv4_Query|requête]]. Ils permettent de mettre en place une requête dédiée à chaque index.
  +
* Le champ 'score' est un champ calculé à partir d'autres. Il n'est donc pas nécessaire de l'alimenter en données, il va les piocher dans code_postal, code_departement, ... L'attribut "transforme" est utilisé à cet effet.
  +
* La plupart des champs ne sont pas stockés dans l'index, mais peuvent toujours être obtenus au travers du champ spécial _source (hormis la géométrie). Cela permet d'alléger le poids de l'index.
  +
* Le champ géométrie est exclus du champ _source pour éviter de surcharger la base. Les géométries des communes sont particulièrement gourmandes. Leur géométrie n'est donc pas du tout accessible (ni même en spécifiant le champ), mais uniquement utilisée à titre de requêtage spatial (topologique). Par contre, une géométrie "pin" est conservée comme géocodage au centroïde et toujours présent dans le champ _source (et lui aussi requêtable).
  +
* Les champs qui sont marqués "index":"not_analyzed" peuvent être utilisés dans des requêtes avec des valeurs brutes (ils ne sont pas analysés). Cela semble pertinent pour les codes, les identifiants, tout ce qui n'est pas du langage naturel en somme. Dans un champ comme "ligne4", la distinction des termes ne pourra donc pas être réalisée.
  +
* Vous pouvez bien sûr ajouter autant de champs que vous le souhaitez, construire des requêtes avec, ... la requête jdonrefv4 n'est qu'un outil comme un autre !
  +
  +
===== Glossaire =====
  +
  +
Les champs utilisés dans chacun des mappings sont décrit dans ce tableau.
  +
Même si la plupart des informations qu'il présente sont évidente, ce tableau m'a été demandé. Il permet de lever l'ambiguité sur l'usage de certain terme de manière synthétique.
  +
Il reprend aussi par conséquent tous les champs du mapping poizon.
  +
  +
Tous ces champs peuvent ne pas être remplis ! Par contre, si les mappings proposés sont utilisés, il faut respecter leur orthographe.
  +
  +
{| border="1"
  +
| '''terme'''
  +
| '''description'''
  +
|-
  +
| poizon_id
  +
| identifiant métier du poi ou de la zone considéré
  +
|-
  +
| adr_id
  +
| identifiant métier de l'adresse (du poi ou de la zone, lorsqu'il s'agit d'un poi ou d'une zone)
  +
|-
  +
| tro_id
  +
| identifiant métier du troncon (auquel appartient l'adresse, lorsqu'il y a une adresse)
  +
|-
  +
| voi_id
  +
| identifiant métier de la voie (auquel appartient le troncon, lorsqu'il y a un troncon)
  +
|-
  +
| code_insee
  +
| code insee de la voie
  +
|-
  +
| code_insee_commune
  +
| code insee de la commune au cas où code insee représente un arrondissement
  +
|-
  +
| code_postal
  +
| code postal de la voie
  +
|-
  +
| code_departement
  +
| code du département où se situe l'adresse, la voie, le troncon, le poi ou la zone ...
  +
|-
  +
| code_pays
  +
| code du pays où se situe le département, la commune, l'adresse, la voie, le troncon, le poi ou la zone ...
  +
|-
  +
| codes
  +
| Il s'agit d'un champ calculé qui contient tous les codes qui permettent de trouver une commune (du département au code postal, en passant par le code insee, d'arrondissement, ou de la commune)
  +
|-
  +
| code_arrondissement
  +
| code de l'arrondissement si cette notion existe
  +
|-
  +
| numero
  +
| numero de l'adresse
  +
|-
  +
| repetition
  +
| BIS, TER, QUATER, QUINQUIES, A, B, C, ...
  +
|-
  +
| type_de_voie
  +
| RUE, BOULEVARD, ... le type de voie de l'adresse ou de la voie
  +
|-
  +
| article
  +
| le petit article qui se trouve entre le type de voie et le libelle. Comme dans BOULEVARD DE L HOPITAL : "DE L".
  +
|-
  +
| libelle
  +
| le libelle complet de la voie (sans article)
  +
|-
  +
| commune
  +
| lol
  +
|-
  +
| pays
  +
| généralement FRANCE, mais le type pays permet de tous les indexer
  +
|-
  +
| t0 et t1
  +
| respectivement le début (inclus) et la fin (exclus) de validité de l'adresse
  +
|-
  +
| poizon_service
  +
| les poi et les zones sont généralement décomposés en plusieurs entités. Il pourrait très bien s'agir de type elasticsearch, mais j'ai pour le moment choisi de les distinguer dans ce champ.
  +
|-
  +
| ligne 1, ligne2, ligne3, ...
  +
| les lignes au sens de la norme postale. Seule la ligne1 et la ligne7 est utilisée actuellement dans le mapping (sans doute la ligne3 à l'avenir). Les autres champs sont donc laissés pour information, et disponible dans les résultats dans le champ _source.
  +
|-
  +
| pin
  +
| généralement le centroïde de l'objet considéré
  +
|-
  +
| geometrie
  +
| la géométrie exacte de l'objet considéré. Elle est confondu avec le pin pour les ponctuels. Elle n'est pas stockée, mais indexée pour les requêtes topologiques.
  +
|-
  +
| fullName
  +
| ce champ est calculé à partir des autres pour permettre une recherche sur une seule ligne. Le champ "transform" est utilisé à cet effet.
  +
|}
  +
  +
===== Champs "obligatoires" =====
  +
  +
Aucun champ n'est réellement obligatoire dans le sens où s'il est absent il n'est simplement pas pris en compte.
  +
Toutefois, il reste important de savoir quels champs sont réellement utiles ou pas.
  +
  +
Le tableau qui suit présente les informations qui sont actuellement utilisées par la requête jdonrefv4.
  +
Ces informations varient suivant l'index concerné.
  +
  +
{| border="1"
  +
| '''terme'''
  +
| '''poizon'''
  +
| '''adresse'''
  +
| '''voie'''
  +
| '''commune'''
  +
| '''departement'''
  +
| '''pays'''
  +
|-
  +
| ligne1,numero, repetition, type_de_voie, article, libelle
  +
| au moins 1
  +
|
  +
|
  +
|
  +
|
  +
|
  +
|-
  +
| numero
  +
|
  +
| obligatoire
  +
|
  +
|
  +
|
  +
|
  +
|-
  +
| repetition
  +
|
  +
| optionnel
  +
|
  +
|
  +
|
  +
|
  +
|-
  +
| type_de_voie, article, libelle
  +
|
  +
| au moins 1
  +
| au moins 1
  +
|
  +
|
  +
|
  +
|-
  +
| code_postal, code_insee, code_departement, code_arrondissement, commune
  +
| optionnel
  +
|
  +
|
  +
| au moins 1
  +
|
  +
|
  +
|-
  +
| code_departement
  +
|
  +
|
  +
|
  +
|
  +
| obligatoire
  +
|
  +
|-
  +
| ligne7
  +
| optionnel
  +
| optionnel
  +
| optionnel
  +
| optionnel
  +
| optionnel
  +
| obligatoire
  +
|-
  +
| code_pays
  +
| inutilisé
  +
| inutilisé
  +
| inutilisé
  +
| inutilisé
  +
| inutilisé
  +
| inutilisé
  +
|}
  +
  +
===== Le mapping poizon =====
  +
  +
Un POIZON est un POI (point d'intérêt) ou une Zone (géographique).
  +
Leur géométrie est différente : un POI est un point, tandis qu'une zone est généralement un polygone (ou multi-polygone).
  +
Le type geo_shape est alors employé pour leur géométrie commune.
  +
Son mapping est défini de la manière suivante :
  +
  +
$ curl -XPUT 'http://localhost:9200/jdonref/poizon/_mapping' -d '{
  +
"poizon": {
  +
"_type": {"store": true},
  +
"_source": {"excludes": ["geometrie"]},
  +
"properties" : {
  +
"poizon_id" : { "type" : "string", "index":"not_analyzed"},
  +
"adr_id" : { "type" : "string", "index":"not_analyzed"},
  +
"tro_id" : { "type" : "string", "index":"not_analyzed"},
  +
"voi_id" : { "type" : "string", "index":"not_analyzed"},
  +
"code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
  +
"code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
  +
"code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
  +
"code_pays" : { "type" : "string" , "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
  +
"codes" : { "type" : "string", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
  +
"numero" : { "type" : "string", "index":"not_analyzed"},
  +
"repetition" : { "type" : "string", "index":"not_analyzed"},
  +
"type_de_voie" : { "type" : "string", "index":"not_analyzed"},
  +
"article" : { "type" : "string", "index":"not_analyzed"},
  +
"libelle" : { "type" : "string", "index":"not_analyzed"},
  +
"commune" : { "type" : "string" , "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
  +
"code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
  +
"pays" : { "type" : "string" , "index": "no"},
  +
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
  +
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
  +
"poizon_service" : { "type" : "integer", "index":"not_analyzed"},
  +
"ligne1" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"ligne2" : { "type" : "string", "index":"no"},
  +
"ligne3" : { "type" : "string", "index":"no"},
  +
"ligne4" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"ligne5" : { "type" : "string", "index":"no"},
  +
"ligne6" : { "type" : "string", "index": "no"},
  +
"ligne7" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
  +
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
  +
"score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
  +
},
  +
"transform": {
  +
"lang" : "groovy",
  +
"script" : "ctx._source['score']= ''; if (ctx._source['ligne1']!=null) { def tokens= ctx._source['ligne1'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|11'; }; if (ctx._source['ligne4']!=null) { def tokens= ctx._source['ligne4'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|12'; }; if (ctx._source['ligne6']!=null) { def tokens= ctx._source['ligne6'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|13'; }; if (ctx._source['ligne7']!=null) { def tokens= ctx._source['ligne7'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|14'; };"
  +
}
  +
}
  +
}'
  +
 
===== Le mapping adresse =====
  +
 
Après les type poizon, le type adresse est le plus complet. Sa géométrie est un point, mais pour des raisons pratiques, le type geo_shape est employé. Son mapping est défini de la manière suivante :
   
 
$ curl -XPUT 'http://localhost:9200/jdonref/adresse/_mapping' -d '{
 
$ curl -XPUT 'http://localhost:9200/jdonref/adresse/_mapping' -d '{
 
"adresse": {
 
"adresse": {
  +
"_type": {"store": true},
  +
"_source": {"excludes": ["geometrie"]},
 
"properties" : {
 
"properties" : {
"adr_id" : { "type" : "string", "store" : true},
+
"adr_id" : { "type" : "string", "index":"no"},
"tro_id" : { "type" : "string", "store" : true},
+
"voi_id" : { "type" : "string", "index":"no"},
"voi_id" : { "type" : "string", "store" : true},
+
"article" : { "type" : "string", "index":"no"},
"codeinsee" : { "type" : "string", "store" : true},
+
"libelle" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
"codedepartement" : { "type" : "string", "store" : true},
+
"type_de_voie" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
"codepays" : { "type" : "string" , "store" : true},
+
"code_pays" : { "type" : "string", "index":"no"},
"numero" : { "type" : "integer", "store": true},
+
"pays" : { "type" : "string" , "index": "no"},
"repetition" : { "type" : "string", "store": true},
+
"code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"typedevoie" : { "type" : "string", "store": true},
+
"code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"article" : { "type" : "string", "store": true},
+
"code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"voie" : { "type" : "string", "store": true},
+
"code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"commune" : { "type" : "string" , "store": true},
+
"code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"codepostal" : { "type" : "string", "store": true},
+
"codes" : { "type" : "string", "analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"commune" : { "type" : "string" , "analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"numero" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
"ligne1" : { "type" : "string", "store": true},
+
"repetition" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
"ligne2" : { "type" : "string", "store": true},
+
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
"ligne3" : { "type" : "string", "store": true},
+
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
"ligne4" : { "type" : "string", "store": true},
+
"score" : { "type" : "string", "term_vector": "yes","index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
"ligne5" : { "type" : "string", "store": true},
+
},
"ligne6" : { "type" : "string", "store": true},
+
"transform": {
"ligne7" : { "type" : "string", "store": true},
+
"lang" : "groovy",
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"}
+
"script" : "ctx._source['score']= ''; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
}
+
}
 
}
 
}
 
}'
 
}'
Ligne 43 : Ligne 281 :
 
Le mapping troncon correspond à une portion de voie. Sa géométrie est une linestring.
 
Le mapping troncon correspond à une portion de voie. Sa géométrie est une linestring.
 
Il dispose de bornes de début et de fin. Mais contrairement à la base de donnée PostgreSQL de JDONREF, il n'a pas de bornes pour chaque coté du troncon (2 troncons sont créés).
 
Il dispose de bornes de début et de fin. Mais contrairement à la base de donnée PostgreSQL de JDONREF, il n'a pas de bornes pour chaque coté du troncon (2 troncons sont créés).
  +
Il n'est pas utilisé par la [[JDONREFv4_Query|requête]] mais pourrait l'être ultérieurement pour fournir une interpolation métrique du géocodage.
 
Son mapping est défini de la manière suivante :
 
Son mapping est défini de la manière suivante :
   
 
$ curl -XPUT 'http://localhost:9200/jdonref/troncon/_mapping' -d '{
 
$ curl -XPUT 'http://localhost:9200/jdonref/troncon/_mapping' -d '{
"adresse": {
+
"troncon": {
  +
"_type": {"store": true},
  +
"_source": {"excludes": ["geometrie"]},
 
"properties" : {
 
"properties" : {
"tro_id" : { "type" : "string", "store" : true},
+
"tro_id" : { "type" : "string", "index":"not_analyzed"},
"voi_id" : { "type" : "string", "store" : true},
+
"voi_id" : { "type" : "string", "index":"not_analyzed"},
"codeinsee" : { "type" : "string", "store" : true},
+
"code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"codedepartement" : { "type" : "string", "store" : true},
+
"code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"codepays" : { "type" : "string" , "store" : true},
+
"code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"numero_debut" : {"type" : "integer", "store" : true},
+
"code_pays" : { "type" : "string" , "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"numero_fin" : {"type" : "integer", "store" : true},
+
"codes" : { "type" : "string", "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"repetition_debut" : {"type" : "string", "store" : true},
+
"numero_debut" : { "type" : "integer", "index":"not_analyzed"},
"repetition_fin" : {"type" : "string", "store" : true},
+
"numero_fin" : { "type" : "integer", "index":"not_analyzed"},
"typedevoie" : { "type" : "string", "store": true},
+
"repetition_debut" : { "type" : "string", "index":"not_analyzed"},
"article" : { "type" : "string", "store": true},
+
"repetition_fin" : { "type" : "string", "index":"not_analyzed"},
"voie" : { "type" : "string", "store": true},
+
"type_de_voie" : { "type" : "string", "index":"not_analyzed"},
"commune" : { "type" : "string" , "store": true},
+
"article" : { "type" : "string", "index":"not_analyzed"},
"codepostal" : { "type" : "string", "store": true},
+
"libelle" : { "type" : "string", "index":"not_analyzed"},
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"commune" : { "type" : "string" , "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"ligne4" : { "type" : "string", "store": true},
+
"code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"ligne5" : { "type" : "string", "store": true},
+
"pays" : { "type" : "string" , "index": "no"},
"ligne6" : { "type" : "string", "store": true},
+
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
"ligne7" : { "type" : "string", "store": true},
+
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"}
+
"ligne4" : { "type" : "string", "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
  +
"ligne5" : { "type" : "string", "index":"no"},
  +
"ligne6" : { "type" : "string", "index": "no"},
  +
"ligne7" : { "type" : "string", "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
  +
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
  +
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
  +
"fullName" : {"type": "string", "term_vector" : "with_positions_offsets_payloads", "index_analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"}
  +
},
  +
"transform" : {
  +
"lang" : "groovy",
  +
"script" : "ctx._source['fullName'] = ''; if (ctx._source['ligne7']!=null) { def tokens = ctx._source['ligne7'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|9'; }; if (ctx._source['code_pays']!=null) { def tokens = ctx._source['code_pays'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|10'; }; if (ctx._source['code_departement']!=null) { def tokens = ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if ( ctx._source['code_insee']!=null) { def tokens = ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['code_insee_commune']!=null) { def tokens = ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['commune']!=null) { def tokens = ctx._source['commune'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|5'; }; if (ctx._source['code_arrondissement']!=null) { def tokens = ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['code_postal']!=null) { def tokens = ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['ligne4']!=null) { def tokens = ctx._source['ligne4'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|2'; };"
 
}
 
}
 
}
 
}
Ligne 80 : Ligne 319 :
   
 
$ curl -XPUT 'http://localhost:9200/jdonref/voie/_mapping' -d '{
 
$ curl -XPUT 'http://localhost:9200/jdonref/voie/_mapping' -d '{
"adresse": {
+
"voie": {
"properties" : {
+
"_type": {"store": true},
"voi_id" : { "type" : "string", "store" : true},
+
"_source": {"excludes": ["geometrie"]},
"codeinsee" : { "type" : "string", "store" : true},
+
"properties" : {
"codedepartement" : { "type" : "string", "store" : true},
+
"voi_id" : { "type" : "string", "index":"not_analyzed"},
"codepays" : { "type" : "string" , "store" : true},
+
"code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"numero_min" : {"type" : "integer", "store" : true},
+
"code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"numero_max" : {"type" : "integer", "store" : true},
+
"code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"typedevoie" : { "type" : "string", "store": true},
+
"code_pays" : { "type" : "string" , "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"article" : { "type" : "string", "store": true},
+
"codes" : { "type" : "string", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"voie" : { "type" : "string", "store": true},
+
"numero_min" : { "type" : "integer", "index":"not_analyzed"},
"commune" : { "type" : "string" , "store": true},
+
"numero_max" : { "type" : "integer", "index":"not_analyzed"},
"codepostal" : { "type" : "string", "store": true},
+
"type_de_voie" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"article" : { "type" : "string", "index":"not_analyzed"},
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"libelle" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"ligne4" : { "type" : "string", "store": true},
+
"commune" : { "type" : "string" , "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
"ligne5" : { "type" : "string", "store": true},
+
"code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"ligne6" : { "type" : "string", "store": true},
+
"code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"ligne7" : { "type" : "string", "store": true},
+
"pays" : { "type" : "string" , "index": "no"},
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"}
+
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
}
+
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
}
+
"ligne4" : { "type" : "string", "index":"no"},
}'
+
"ligne5" : { "type" : "string", "index":"no"},
+
"ligne6" : { "type" : "string", "index": "no"},
  +
"ligne7" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
  +
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
  +
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
  +
"score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
  +
},
  +
"transform": {
  +
"lang" : "groovy",
  +
"script" : "ctx._source['score']= ''; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
  +
}
  +
}
  +
}'
   
 
===== Le mapping commune =====
 
===== Le mapping commune =====
Ligne 112 : Ligne 351 :
 
$ curl -XPUT 'http://localhost:9200/jdonref/commune/_mapping' -d '{
 
$ curl -XPUT 'http://localhost:9200/jdonref/commune/_mapping' -d '{
 
"commune": {
 
"commune": {
  +
"_type": {"store": true},
  +
"_source": {"excludes": ["geometrie"]},
 
"properties" : {
 
"properties" : {
"codeinsee" : { "type" : "string", "store" : true},
+
"code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"codedepartement" : { "type" : "string", "store" : true},
+
"code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"codepays" : { "type" : "string" , "store" : true},
+
"code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"commune" : { "type" : "string" , "store": true},
+
"code_pays" : { "type" : "string" , "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
"codepostal" : { "type" : "string", "store": true},
+
"commune" : { "type" : "string" , "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"ligne4" : { "type" : "string", "store": true},
+
"codes" : { "type" : "string", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
"ligne5" : { "type" : "string", "store": true},
+
"pays" : { "type" : "string" , "index": "no"},
"ligne6" : { "type" : "string", "store": true},
+
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
"ligne7" : { "type" : "string", "store": true},
+
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"}
+
"ligne5" : { "type" : "string", "index":"no"},
}
+
"ligne6" : { "type" : "string", "index": "no"},
  +
"ligne7" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
  +
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
  +
"score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
  +
},
  +
"transform": {
  +
"lang" : "groovy",
  +
"script" : "ctx._source['score']= ''; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
  +
}
 
}
 
}
 
}'
 
}'
Ligne 136 : Ligne 377 :
 
$ curl -XPUT 'http://localhost:9200/jdonref/departement/_mapping' -d '{
 
$ curl -XPUT 'http://localhost:9200/jdonref/departement/_mapping' -d '{
 
"departement": {
 
"departement": {
  +
"_type": {"store": true},
  +
"_source": {"excludes": ["geometrie"]},
 
"properties" : {
 
"properties" : {
"codedepartement" : { "type" : "string", "store" : true},
+
"code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
"codepays" : { "type" : "string" , "store" : true},
+
"code_pays" : { "type" : "string" , "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"codes" : { "type" : "string", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"pays" : { "type" : "string" , "index": "no"},
"ligne6" : { "type" : "string", "store": true},
+
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
"ligne7" : { "type" : "string", "store": true},
+
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"}
+
"ligne6" : { "type" : "string", "index": "no"},
}
+
"ligne7" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
  +
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
  +
"fullName" : {"type": "string", "term_vector" : "with_positions_offsets_payloads", "index_analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
  +
"score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
  +
},
  +
"transform": {
  +
"lang" : "groovy",
  +
"script" : "ctx._source['score']= ''; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
  +
}
 
}
 
}
 
}'
 
}'
Ligne 155 : Ligne 398 :
 
$ curl -XPUT 'http://localhost:9200/jdonref/pays/_mapping' -d '{
 
$ curl -XPUT 'http://localhost:9200/jdonref/pays/_mapping' -d '{
 
"pays": {
 
"pays": {
"properties" : {
+
"_type": {"store": true},
"codepays" : { "type" : "string" , "store" : true},
+
"_source": {"excludes": ["geometrie"]},
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"properties" : {
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss"},
+
"code_pays" : { "type" : "string" , "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
"ligne7" : { "type" : "string", "store": true},
+
"pays" : { "type" : "string" , "index": "no"},
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"}
+
"t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
}
+
"t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
}
+
"ligne7" : { "type" : "string", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
  +
"pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
  +
"geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
  +
"score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
  +
},
  +
"transform": {
  +
"lang" : "groovy",
  +
"script" : "ctx._source['score']= ''; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; if (ctx._source['ligne1']!=null) { def tokens= ctx._source['ligne1'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|11'; }; if (ctx._source['ligne4']!=null) { def tokens= ctx._source['ligne4'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|12'; }; if (ctx._source['ligne6']!=null) { def tokens= ctx._source['ligne6'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|13'; }; if (ctx._source['ligne7']!=null) { def tokens= ctx._source['ligne7'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|14'; };"
  +
}
  +
}
 
}'
 
}'

Version actuelle en date du 26 février 2016 à 22:19

JDONREFv4 introduit différents mapping permettant de gérer des adresses.

C'est le POI ou la Zone qui dispose de la plus grande richesse d'information, mais les autres mappings peuvent disposer d'informations qui leurs sont propres (notamment leur géométrie).

Ils sont fournis dans le plugin sous la forme de fichiers json.

Quelques informations à lire avant de commencer

Les mappings proposés dans cette page ne sont pas obligatoires pour travailler avec la requête JDONREF. Toutefois, si vous débutez avec elasticsearch, il sera sans doute plus simple de commencer avec les mappings fournis.

Le mapping du type "poizon" peut être appliqué à tous les types, car il est le plus générique (si un champ n'est pas utilisé, cela ne prend pas de place). Toutefois, pour plus de lisibilité, les mappings de chaque type sont fournis de manière allégée.

Les mappings qui suivent disposent aussi de quelques particularités à connaître pour leur bonne lecture.

  • JDONREFv4 se sert de multiples champs pour sa recherche, il est donc important de respecter le nom de ces champs. Les autres sont aussi généralement associés à une adresse mais ne lui sont pas indispensables.
  • Le respect des indexs est nécessaire pour le bon usage de la requête. Ils permettent de mettre en place une requête dédiée à chaque index.
  • Le champ 'score' est un champ calculé à partir d'autres. Il n'est donc pas nécessaire de l'alimenter en données, il va les piocher dans code_postal, code_departement, ... L'attribut "transforme" est utilisé à cet effet.
  • La plupart des champs ne sont pas stockés dans l'index, mais peuvent toujours être obtenus au travers du champ spécial _source (hormis la géométrie). Cela permet d'alléger le poids de l'index.
  • Le champ géométrie est exclus du champ _source pour éviter de surcharger la base. Les géométries des communes sont particulièrement gourmandes. Leur géométrie n'est donc pas du tout accessible (ni même en spécifiant le champ), mais uniquement utilisée à titre de requêtage spatial (topologique). Par contre, une géométrie "pin" est conservée comme géocodage au centroïde et toujours présent dans le champ _source (et lui aussi requêtable).
  • Les champs qui sont marqués "index":"not_analyzed" peuvent être utilisés dans des requêtes avec des valeurs brutes (ils ne sont pas analysés). Cela semble pertinent pour les codes, les identifiants, tout ce qui n'est pas du langage naturel en somme. Dans un champ comme "ligne4", la distinction des termes ne pourra donc pas être réalisée.
  • Vous pouvez bien sûr ajouter autant de champs que vous le souhaitez, construire des requêtes avec, ... la requête jdonrefv4 n'est qu'un outil comme un autre !
Glossaire

Les champs utilisés dans chacun des mappings sont décrit dans ce tableau. Même si la plupart des informations qu'il présente sont évidente, ce tableau m'a été demandé. Il permet de lever l'ambiguité sur l'usage de certain terme de manière synthétique. Il reprend aussi par conséquent tous les champs du mapping poizon.

Tous ces champs peuvent ne pas être remplis ! Par contre, si les mappings proposés sont utilisés, il faut respecter leur orthographe.

terme description
poizon_id identifiant métier du poi ou de la zone considéré
adr_id identifiant métier de l'adresse (du poi ou de la zone, lorsqu'il s'agit d'un poi ou d'une zone)
tro_id identifiant métier du troncon (auquel appartient l'adresse, lorsqu'il y a une adresse)
voi_id identifiant métier de la voie (auquel appartient le troncon, lorsqu'il y a un troncon)
code_insee code insee de la voie
code_insee_commune code insee de la commune au cas où code insee représente un arrondissement
code_postal code postal de la voie
code_departement code du département où se situe l'adresse, la voie, le troncon, le poi ou la zone ...
code_pays code du pays où se situe le département, la commune, l'adresse, la voie, le troncon, le poi ou la zone ...
codes Il s'agit d'un champ calculé qui contient tous les codes qui permettent de trouver une commune (du département au code postal, en passant par le code insee, d'arrondissement, ou de la commune)
code_arrondissement code de l'arrondissement si cette notion existe
numero numero de l'adresse
repetition BIS, TER, QUATER, QUINQUIES, A, B, C, ...
type_de_voie RUE, BOULEVARD, ... le type de voie de l'adresse ou de la voie
article le petit article qui se trouve entre le type de voie et le libelle. Comme dans BOULEVARD DE L HOPITAL : "DE L".
libelle le libelle complet de la voie (sans article)
commune lol
pays généralement FRANCE, mais le type pays permet de tous les indexer
t0 et t1 respectivement le début (inclus) et la fin (exclus) de validité de l'adresse
poizon_service les poi et les zones sont généralement décomposés en plusieurs entités. Il pourrait très bien s'agir de type elasticsearch, mais j'ai pour le moment choisi de les distinguer dans ce champ.
ligne 1, ligne2, ligne3, ... les lignes au sens de la norme postale. Seule la ligne1 et la ligne7 est utilisée actuellement dans le mapping (sans doute la ligne3 à l'avenir). Les autres champs sont donc laissés pour information, et disponible dans les résultats dans le champ _source.
pin généralement le centroïde de l'objet considéré
geometrie la géométrie exacte de l'objet considéré. Elle est confondu avec le pin pour les ponctuels. Elle n'est pas stockée, mais indexée pour les requêtes topologiques.
fullName ce champ est calculé à partir des autres pour permettre une recherche sur une seule ligne. Le champ "transform" est utilisé à cet effet.
Champs "obligatoires"

Aucun champ n'est réellement obligatoire dans le sens où s'il est absent il n'est simplement pas pris en compte. Toutefois, il reste important de savoir quels champs sont réellement utiles ou pas.

Le tableau qui suit présente les informations qui sont actuellement utilisées par la requête jdonrefv4. Ces informations varient suivant l'index concerné.

terme poizon adresse voie commune departement pays
ligne1,numero, repetition, type_de_voie, article, libelle au moins 1
numero obligatoire
repetition optionnel
type_de_voie, article, libelle au moins 1 au moins 1
code_postal, code_insee, code_departement, code_arrondissement, commune optionnel au moins 1
code_departement obligatoire
ligne7 optionnel optionnel optionnel optionnel optionnel obligatoire
code_pays inutilisé inutilisé inutilisé inutilisé inutilisé inutilisé
Le mapping poizon

Un POIZON est un POI (point d'intérêt) ou une Zone (géographique). Leur géométrie est différente : un POI est un point, tandis qu'une zone est généralement un polygone (ou multi-polygone). Le type geo_shape est alors employé pour leur géométrie commune. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/poizon/_mapping' -d '{
    "poizon": {
       "_type": {"store": true},
       "_source": {"excludes": ["geometrie"]},
       "properties" : {
                         "poizon_id" : { "type" : "string", "index":"not_analyzed"},
                         "adr_id" : { "type" : "string", "index":"not_analyzed"},
                         "tro_id" : { "type" : "string", "index":"not_analyzed"},
                         "voi_id" : { "type" : "string", "index":"not_analyzed"},
                         "code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_pays" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                         "codes" : { "type" : "string",  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                         "numero" : { "type" : "string", "index":"not_analyzed"},
                         "repetition" : { "type" : "string", "index":"not_analyzed"},
                         "type_de_voie" : { "type" : "string", "index":"not_analyzed"},
                         "article" : { "type" : "string", "index":"not_analyzed"},
                         "libelle" : { "type" : "string", "index":"not_analyzed"},
                         "commune" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                         "code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "pays" : { "type" : "string" , "index": "no"},
                         "t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                         "t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                         "poizon_service" : { "type" : "integer", "index":"not_analyzed"},
                         "ligne1" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                         "ligne2" : { "type" : "string", "index":"no"},
                         "ligne3" : { "type" : "string", "index":"no"},
                         "ligne4" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                         "ligne5" : { "type" : "string", "index":"no"},
                         "ligne6" : { "type" : "string", "index": "no"},
                         "ligne7" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                         "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
                         "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
                         "score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
     },
       "transform": {
         "lang" : "groovy",
         "script" : "ctx._source['score']= ; if (ctx._source['ligne1']!=null) { def tokens= ctx._source['ligne1'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|11'; }; if (ctx._source['ligne4']!=null) { def tokens= ctx._source['ligne4'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|12'; }; if (ctx._source['ligne6']!=null) { def tokens= ctx._source['ligne6'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|13'; }; if (ctx._source['ligne7']!=null) { def tokens= ctx._source['ligne7'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|14'; };"
       }
   }
 }'
Le mapping adresse

Après les type poizon, le type adresse est le plus complet. Sa géométrie est un point, mais pour des raisons pratiques, le type geo_shape est employé. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/adresse/_mapping' -d '{
    "adresse": {
       "_type": {"store": true},
       "_source": {"excludes": ["geometrie"]},
       "properties" : {
           "adr_id" : { "type" : "string", "index":"no"},
           "voi_id" : { "type" : "string", "index":"no"},
           "article" : { "type" : "string", "index":"no"},
           "libelle" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
           "type_de_voie" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
           "code_pays" : { "type" : "string", "index":"no"},
           "pays" : { "type" : "string" , "index": "no"},
           "code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
           "code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
           "code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
           "code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
           "code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
           "codes" : { "type" : "string",  "analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
           "commune" : { "type" : "string" , "analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
           "numero" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
           "repetition" : { "type" : "string", "analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
           "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
           "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
           "score" : { "type" : "string", "term_vector": "yes","index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
       },
       "transform": {
         "lang" : "groovy",
         "script" : "ctx._source['score']= ; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
       }
   }
 }'
Le mapping troncon

Le mapping troncon correspond à une portion de voie. Sa géométrie est une linestring. Il dispose de bornes de début et de fin. Mais contrairement à la base de donnée PostgreSQL de JDONREF, il n'a pas de bornes pour chaque coté du troncon (2 troncons sont créés). Il n'est pas utilisé par la requête mais pourrait l'être ultérieurement pour fournir une interpolation métrique du géocodage. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/troncon/_mapping' -d '{
    "troncon": {
       "_type": {"store": true},
       "_source": {"excludes": ["geometrie"]},
       "properties" : {
                           "tro_id" : { "type" : "string", "index":"not_analyzed"},
                           "voi_id" : { "type" : "string", "index":"not_analyzed"},
                           "code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_pays" : { "type" : "string" , "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "codes" : { "type" : "string", "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "numero_debut" : { "type" : "integer", "index":"not_analyzed"},
                           "numero_fin" : { "type" : "integer", "index":"not_analyzed"},
                           "repetition_debut" : { "type" : "string", "index":"not_analyzed"},
                           "repetition_fin" : { "type" : "string", "index":"not_analyzed"},
                           "type_de_voie" : { "type" : "string", "index":"not_analyzed"},
                           "article" : { "type" : "string", "index":"not_analyzed"},
                           "libelle" : { "type" : "string", "index":"not_analyzed"},
                           "commune" : { "type" : "string" , "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "pays" : { "type" : "string" , "index": "no"},
                           "t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "ligne4" : { "type" : "string", "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "ligne5" : { "type" : "string",  "index":"no"},
                           "ligne6" : { "type" : "string", "index": "no"},
                           "ligne7" : { "type" : "string", "term_vector" : "with_positions_offsets", "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
                           "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
                           "fullName" : {"type": "string", "term_vector" : "with_positions_offsets_payloads", "index_analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"}
                       },
      "transform" : {
          "lang" : "groovy",
          "script" : "ctx._source['fullName'] = ; if (ctx._source['ligne7']!=null) { def tokens = ctx._source['ligne7'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|9'; }; if (ctx._source['code_pays']!=null) { def tokens = ctx._source['code_pays'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|10'; }; if (ctx._source['code_departement']!=null) { def tokens = ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if ( ctx._source['code_insee']!=null) { def tokens = ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['code_insee_commune']!=null) { def tokens = ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['commune']!=null) { def tokens = ctx._source['commune'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|5'; }; if (ctx._source['code_arrondissement']!=null) { def tokens = ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; }; if (ctx._source['code_postal']!=null) { def tokens = ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|3'; };  if (ctx._source['ligne4']!=null) { def tokens = ctx._source['ligne4'].split(' '); for(x in tokens) ctx._source['fullName'] += ' ' + x + '|2'; };"
      }
   }
 }'
Le mapping voie

Le mapping voie correspond à une adresse sans numéro. Sa géométrie est une linestring (en attendant l'implémentation du multilinestring par elasticsearch). Elle dispose d'un numéro de début et de fin. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/voie/_mapping' -d '{
    "voie": {
       "_type": {"store": true},
      "_source": {"excludes": ["geometrie"]},
      "properties" : {
                           "voi_id" : { "type" : "string", "index":"not_analyzed"},
                           "code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_pays" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "codes" : { "type" : "string",  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "numero_min" : { "type" : "integer", "index":"not_analyzed"},
                           "numero_max" : { "type" : "integer", "index":"not_analyzed"},
                           "type_de_voie" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "article" : { "type" : "string", "index":"not_analyzed"},
                           "libelle" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "commune" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                           "pays" : { "type" : "string" , "index": "no"},
                           "t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "ligne4" : { "type" : "string", "index":"no"},
                           "ligne5" : { "type" : "string",  "index":"no"},
                           "ligne6" : { "type" : "string", "index": "no"},
                           "ligne7" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search", "similarity":"jdonrefv4"},
                           "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
                           "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
                           "score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
                       },
       "transform": {
         "lang" : "groovy",
         "script" : "ctx._source['score']= ; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
       }
  }
}'
Le mapping commune

Le mapping commune a pour géométrie un multipolygon, sans extrusion. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/commune/_mapping' -d '{
    "commune": {
       "_type": {"store": true},
       "_source": {"excludes": ["geometrie"]},
       "properties" : {
                         "code_insee" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_departement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_insee_commune" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_pays" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                         "commune" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                         "code_arrondissement" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "code_postal" : { "type" : "string", "index":"not_analyzed", "copy_to": ["codes"]},
                         "codes" : { "type" : "string",  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                         "pays" : { "type" : "string" , "index": "no"},
                         "t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                         "t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                         "ligne5" : { "type" : "string", "index":"no"},
                         "ligne6" : { "type" : "string", "index": "no"},
                         "ligne7" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                         "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
                         "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
                         "score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
                       },
       "transform": {
         "lang" : "groovy",
         "script" : "ctx._source['score']= ; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
       }
   }
 }'
Le mapping departement

Le mapping commune a pour géométrie un multipolygon, sans extrusion. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/departement/_mapping' -d '{
    "departement": {
       "_type": {"store": true},
       "_source": {"excludes": ["geometrie"]},
       "properties" : {
                           "code_departement" : { "type" : "string",  "index":"not_analyzed", "copy_to": ["codes"]},
                           "code_pays" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                           "codes" : { "type" : "string",  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                           "pays" : { "type" : "string" , "index": "no"},
                           "t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "ligne6" : { "type" : "string", "index": "no"},
                           "ligne7" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                           "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
                           "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
                           "fullName" : {"type": "string", "term_vector" : "with_positions_offsets_payloads", "index_analyzer":"jdonrefv4_index_token_count","search_analyzer":"jdonrefv4_search"},
                           "score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
                       },
       "transform": {
         "lang" : "groovy",
         "script" : "ctx._source['score']= ; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; "
       }
   }
 }'
Le mapping pays

Le mapping pays a pour géométrie un multipolygon, sans extrusion. Son mapping est défini de la manière suivante :

 $ curl -XPUT 'http://localhost:9200/jdonref/pays/_mapping' -d '{
    "pays": {
       "_type": {"store": true},
      "_source": {"excludes": ["geometrie"]},
      "properties" : {
                           "code_pays" : { "type" : "string" ,  "index_analyzer":"jdonrefv4_codes_index","search_analyzer":"jdonrefv4_search"},
                           "pays" : { "type" : "string" , "index": "no"},
                           "t0" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "t1" : { "type" : "date", "format": "YYYY-MM-dd HH:mm:ss", "index":"not_analyzed"},
                           "ligne7" : { "type" : "string",  "index_analyzer":"jdonrefv4_index","search_analyzer":"jdonrefv4_search"},
                           "pin" : { "properties" : { "centroide" : { "type" : "geo_point" , "fielddata" : { "format" : "compressed" , "precision" : "1cm"}}}},
                           "geometrie" : { "type" : "geo_shape", "precision": "1cm", "tree": "quadtree"},
                           "score" : { "type" : "string", "term_vector":"yes", "index":"analyzed" , "analyzer":"jdonrefv4_score_analyzer"}
                      },
       "transform": {
         "lang" : "groovy",
         "script" : "ctx._source['score']= ; if (ctx._source['numero']!=null) { def tokens= ctx._source['numero'].split(' '); for(x in tokens) ctx._source['numero'] += ' ' + x + '|1'; }; if (ctx._source['repetition']!=null) { def tokens= ctx._source['repetition'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|2'; }; if (ctx._source['type_de_voie']!=null) { def tokens= ctx._source['type_de_voie'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|3'; }; if (ctx._source['libelle']!=null) { def tokens= ctx._source['libelle'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|4'; }; if (ctx._source['code_postal']!=null) { def tokens= ctx._source['code_postal'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|5'; }; if (ctx._source['code_departement']!=null) { def tokens= ctx._source['code_departement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|6'; }; if (ctx._source['code_arrondissement']!=null) { def tokens= ctx._source['code_arrondissement'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|7'; }; if (ctx._source['code_insee']!=null) { def tokens= ctx._source['code_insee'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|8'; }; if (ctx._source['code_insee_commune']!=null) { def tokens= ctx._source['code_insee_commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|9'; }; if (ctx._source['commune']!=null) { def tokens= ctx._source['commune'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|10'; }; if (ctx._source['ligne1']!=null) { def tokens= ctx._source['ligne1'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|11'; }; if (ctx._source['ligne4']!=null) { def tokens= ctx._source['ligne4'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|12'; }; if (ctx._source['ligne6']!=null) { def tokens= ctx._source['ligne6'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|13'; }; if (ctx._source['ligne7']!=null) { def tokens= ctx._source['ligne7'].split(' '); for(x in tokens) ctx._source['score'] += ' ' + x + '|14'; };"
       }
  }
 }'