<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/api.php?action=feedcontributions&amp;amp;feedformat=atom&amp;amp;user=Najimou</id>
		<title>JDONREF Wiki - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/api.php?action=feedcontributions&amp;amp;feedformat=atom&amp;amp;user=Najimou"/>
		<link rel="alternate" type="text/html" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php/Sp%C3%A9cial:Contributions/Najimou"/>
		<updated>2026-04-06T08:31:41Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=445</id>
		<title>JDONREFv4 plugin GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=445"/>
				<updated>2014-12-22T17:55:13Z</updated>
		
		<summary type="html">&lt;p&gt;Najimou : /* Un alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page est destinée aux utilisateurs confirmés d'ElasticSearch qui souhaitent utiliser JDONREF.&lt;br /&gt;
Si des éléments vous échappent dans cette page, je vous invite à revoir la page des [[JDONREFv4_Plugin_BeginnersMode|débutants]].&lt;br /&gt;
&lt;br /&gt;
L'utilisation du plugin JDONREFv4 nécessite :&lt;br /&gt;
* de disposer d'un cluster [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html elasticsearch] !&lt;br /&gt;
* d'installer le [[JDONREFv4_Plugin|plugin]] JDONREFv4 (voir [[JDONREFv4_Plugin#Installation_du_plugin| ici]])&lt;br /&gt;
* de créer le ou les index nécessaires&lt;br /&gt;
* de créer les mappings&lt;br /&gt;
* puis d'indexer le contenu&lt;br /&gt;
&lt;br /&gt;
Vous êtes ensuite libre d'effectuer les recherches souhaitées ! L'API elasticsearch peut bien sûr être utilisée, mais le plugin jdonrefv4 fourni un moyen de chercher efficacement des adresses (c'est à dire avec les résultats auxquels on devrait s'attendre).&lt;br /&gt;
Cette page suppose que le cluster elasticsearch et que le plugin jdonref (et éventuelles dépendances) sont installés.&lt;br /&gt;
&lt;br /&gt;
==== Création de l'index ====&lt;br /&gt;
&lt;br /&gt;
La version débutant de la création de l'index propose :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
&lt;br /&gt;
Vous pouvez noter plusieurs choses au sujet de cette configuration d'index :&lt;br /&gt;
* Les analyzers jdonrefv4_synonyme et jdonrefv4_nGram sont des versions améliorées des analyzers correspondant d'Elasticsearch. Si vous souhaitez utiliser des synonymes ou des nGrams avec JDONREF, ces variantes doivent être utilisées. Elles sont simplement compatibles avec les payloads.&lt;br /&gt;
* A noter que le metaphone n'est plus utilisé pour le moment, car combiné au ngram, il introduit un trop grand nombre de faux positifs. Vous pouvez toutefois le mettre en place à votre guise.&lt;br /&gt;
* Le &amp;quot;french_keywords&amp;quot; peut être rétabli si vous notez quelques mots auxquels l'application du stemmer ne fournis pas de bons résultats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le reste de cette page, cette installation est plusieurs fois remise en cause. Lisez jusqu'au bout.&lt;br /&gt;
&lt;br /&gt;
==== Un alias ====&lt;br /&gt;
&lt;br /&gt;
Ces remarques signifient surtout que ce plugin n'est qu'un outil. Vous pouvez l'utiliser à votre guise, modifier le fichier de configuration fourni, et adapter les analyzers à votre propre cas de figure.&lt;br /&gt;
&lt;br /&gt;
A titre d'exemple, vous souhaiterez sans doute effectuer des mises à jour de JDONREF. Si vous effectuez une mise à jour en masse de l'ensemble de vos adresses, vous aurez une interruption de service.&lt;br /&gt;
Plutôt que d'utiliser un index, elasticsearch vous propose d'utiliser un [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html alias] :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141201/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
  ... indexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot; : &amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot; : &amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Ce qui vous permettra d'utiliser l'alias &amp;quot;jdonref&amp;quot; tout comme un index, et de réindexer sous un autre nom pour effectuer une mise à jour :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141202/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
  ... réindexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141202&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}, {&amp;quot;remove&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si vous avez bien compris, il va vous falloir doubler votre DD, soit 200 Go pour la France entière.&lt;br /&gt;
&lt;br /&gt;
Bon. Cela dit j'avais présupposé dans l'introduction que vous étiez familiers de elasticsearch ... Vous ne m'y reprendrez plus. Passons aux choses sérieuses !&lt;br /&gt;
&lt;br /&gt;
==== Fréquences ====&lt;br /&gt;
&lt;br /&gt;
En tant que moteur de recherche à index inversé, ElasticSearch est efficace pour effectuer des recherches sur des termes peu fréquents, aussi nombreux soient-ils. Ses fonctionnalités de mises en cache permettent aussi d'obtenir de bonnes performances à l'usage sur les termes plus fréquents, et fréquemment utilisés.&lt;br /&gt;
&lt;br /&gt;
Quelques chiffres :&lt;br /&gt;
# 32 000 communes ;&lt;br /&gt;
# 1 200 000 voies ;&lt;br /&gt;
# 18 000 000 adresses ;&lt;br /&gt;
&lt;br /&gt;
Ce qui signifie une moyenne de 18 adresses pour une même voie. Ce qui signifie aussi une moyenne de 37 voies par commune (bien sûr parfois beaucoup plus !).&lt;br /&gt;
&lt;br /&gt;
En quoi est-ce important ?&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les communes : vous obtenez quelques dizaines de résultat (PARISIS, ...).&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les voies : vous en obtenez mécaniquement au moins 30 fois plus.&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les adresse : le facteur est de 600, soit un nombre à 5 chiffres.&lt;br /&gt;
&lt;br /&gt;
D'accord, ce n'est pas très impressionnant, mais PARIS n'est pas le terme le plus fréquent.&lt;br /&gt;
Lorsque vous cherchez &amp;quot;RUE&amp;quot; parmi les adresses, ceux sont 12 000 000 de documents qui sont concernés.&lt;br /&gt;
Sur ma plateforme de test de 6 coeurs virtuels, 40 Go de RAM, 5 shards, cela prend environ 2 minutes (si vous n'avez pas de timeout avant !) ...&lt;br /&gt;
&lt;br /&gt;
Vous avez alors deux stratégies :&lt;br /&gt;
* Elasticsearch est scalable ... et vous avez les moyens de le rendre scalable. Comptez 8 coeurs pour 8 départements. La recherche de toutes les RUE de France devient alors humainement possible. &lt;br /&gt;
* Vous tentez comme moi d'optimiser le tout.&lt;br /&gt;
&lt;br /&gt;
==== Optimisation ====&lt;br /&gt;
&lt;br /&gt;
   Le reste de cette page est en cours de rédaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour utiliser le paramètre maxSizePerType de la requête JDONREF, il est conseillé (obligatoire) de répartir les types sur de multiples index.&lt;br /&gt;
D'une manière générale, il est même plus que conseillé de répartir les communes, départements et pays sur un unique shard (avec des réplicats, et potentiellement sur différents index).&lt;br /&gt;
&lt;br /&gt;
A cet effet, et pour simplifier le fonctionnement de l'ensemble, il est possible d'utiliser des alias elasticsearch.&lt;br /&gt;
Un alias permet de &amp;quot;contenir&amp;quot; différent index.&lt;br /&gt;
Lorsqu'une requête est faite sur un alias, tous les index de l'alias sont requêtés (et le résultat aggrégé).&lt;br /&gt;
&lt;br /&gt;
Les index de mon cluster sont répartis ainsi (via un batch) :&lt;br /&gt;
&lt;br /&gt;
# alias jdonref&lt;br /&gt;
# index pays, 1 shard + 1 réplica&lt;br /&gt;
# index departement, 1 shard + 1 réplica&lt;br /&gt;
# index commune, 1 shard + 1 réplica&lt;br /&gt;
# index voie, 5 shards + 1 réplica&lt;br /&gt;
# index adresse, 5 shards + 1 réplica&lt;br /&gt;
# index poizon, 5 shards + 1 réplica&lt;br /&gt;
NB: Je n'indexe pas les troncons, je n'en ai pas l'usage.&lt;br /&gt;
NB: Notez que vous pourriez aussi choisir de regrouper pays, departement et commune. Il faut savoir que dans un même index, les fréquences des termes sont cumulés. Dans le même index, les communes auront donc une influence sur la fréquence des termes des pays. A vous de voir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela me permet de définir maxSizePerType à 5000 (voir [[JDONREFv4_Query#Optimisation | optimisation]]), pour éviter de polluer certaines requêtes avec des résultats d'adresse superflus.&lt;br /&gt;
Bien sûr, il est nécessaire d'adapter les requêtes de création des index, des mappings, et d'ajouter la création d'un alias.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour les index de pays, departement, commune, il s'agit simplement d'ajouter &amp;quot;number_of_shards&amp;quot; et &amp;quot;number_of_replicas&amp;quot;. Ici l'exemple incomplet de l'index des pays :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_pays/' -d '{&lt;br /&gt;
     &amp;quot;index&amp;quot; : {&lt;br /&gt;
        &amp;quot;number_of_shards&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;number_of_replicas&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;analysis&amp;quot; : {&lt;br /&gt;
            &amp;quot;analyzer&amp;quot;: {&lt;br /&gt;
                &amp;quot;jdonrefv4_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;whitespace&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;delimited_payload_filter&amp;quot;, &amp;quot;lowercase&amp;quot;, &amp;quot;french_elision&amp;quot;, &amp;quot;french_stop&amp;quot;, /*/&amp;quot;french_keywords&amp;quot;,*/ &amp;quot;french_stemmer&amp;quot;,&amp;quot;jdonrefv4_synonyme&amp;quot;, &amp;quot;jdonrefv4_nGram&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;jdonrefv4_codes_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;standard&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;standard&amp;quot;, &amp;quot;lowercase&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le mapping du pays doit bien sûr être réalisé sur l'index du pays ... &lt;br /&gt;
&lt;br /&gt;
  $ curl -XPUT 'http://localhost:9200/jdonref_pays/pays/_mapping' -d '{&lt;br /&gt;
    &amp;quot;pays&amp;quot;: {&lt;br /&gt;
       &amp;quot;_type&amp;quot;: {&amp;quot;store&amp;quot;: true},&lt;br /&gt;
      &amp;quot;_source&amp;quot;: {&amp;quot;excludes&amp;quot;: [&amp;quot;geometrie&amp;quot;]},&lt;br /&gt;
      &amp;quot;properties&amp;quot; : { &lt;br /&gt;
                           &amp;quot;code_pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_codes_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;index&amp;quot;: &amp;quot;no&amp;quot;},&lt;br /&gt;
                           &amp;quot;t0&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;t1&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;ligne7&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pin&amp;quot; : { &amp;quot;properties&amp;quot; : { &amp;quot;centroide&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_point&amp;quot; , &amp;quot;fielddata&amp;quot; : { &amp;quot;format&amp;quot; : &amp;quot;compressed&amp;quot; , &amp;quot;precision&amp;quot; : &amp;quot;1cm&amp;quot;}}}},&lt;br /&gt;
                           &amp;quot;geometrie&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_shape&amp;quot;, &amp;quot;precision&amp;quot;: &amp;quot;1cm&amp;quot;, &amp;quot;tree&amp;quot;: &amp;quot;quadtree&amp;quot;},&lt;br /&gt;
                           &amp;quot;fullName&amp;quot; : {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets_payloads&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index_token_count&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;}&lt;br /&gt;
                      },&lt;br /&gt;
      &amp;quot;transform&amp;quot; : {&lt;br /&gt;
          &amp;quot;lang&amp;quot; : &amp;quot;groovy&amp;quot;,&lt;br /&gt;
          &amp;quot;script&amp;quot; : &amp;quot;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'; };&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }'&lt;br /&gt;
&lt;br /&gt;
et enfin le pays peut être rattaché à l'alias jdonref :&lt;br /&gt;
&lt;br /&gt;
  $ curl -XPOST 'http://localhost:9200/_aliases' -d '{&lt;br /&gt;
  {&amp;quot;actions&amp;quot;:[{&amp;quot;add&amp;quot;:{&amp;quot;index&amp;quot;:&amp;quot;jdonref_pays&amp;quot;,&amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Idem pour les autres types (n'oubliez pas d'ajouter des shards pour les voies, adresses et poizon).&lt;br /&gt;
&lt;br /&gt;
Vous êtes alors prêt à utiliser une requête avec maxSizePerType comme [[JDONREFv4_Query#Optimisation | ici]].&lt;br /&gt;
&lt;br /&gt;
Pour être clair, avec maxSizePerType défini à 10 000, d'après les statistiques de fréquence fournies par elasticsearch sur la base IGN 2013, les adresses composées exclusivement des 84 termes suivant nécessiteront la saisie du code postal ou du code insee (sauf 6 communes pour lesquels le code insee est trop fréquent, voir la liste).&lt;br /&gt;
Chaque terme est présenté avec sa fréquence.&lt;br /&gt;
&lt;br /&gt;
*france      18934777&lt;br /&gt;
*rue          12000419&lt;br /&gt;
*avenue    1520128&lt;br /&gt;
*saint        2726561&lt;br /&gt;
*chemin    1357589&lt;br /&gt;
*route       1289752&lt;br /&gt;
*bis           1068563&lt;br /&gt;
*mont         726556&lt;br /&gt;
*impasse   724520&lt;br /&gt;
*jean      557596&lt;br /&gt;
*boulevard    475745&lt;br /&gt;
*grand   430452&lt;br /&gt;
*chateau      409622&lt;br /&gt;
*place   399026&lt;br /&gt;
*arondi   284874&lt;br /&gt;
*pont   247505&lt;br /&gt;
*tour   223095&lt;br /&gt;
*paul   222773&lt;br /&gt;
*cour   217926&lt;br /&gt;
*moulin   215612&lt;br /&gt;
*fer   215394&lt;br /&gt;
*champ   212369&lt;br /&gt;
*ter   211768&lt;br /&gt;
*general   199648&lt;br /&gt;
*george   197359&lt;br /&gt;
*pari   194572&lt;br /&gt;
*loui   193026&lt;br /&gt;
*marti   176915&lt;br /&gt;
*mare   173454&lt;br /&gt;
*mars   168783&lt;br /&gt;
*eglis   163259&lt;br /&gt;
*bourg   162933&lt;br /&gt;
*fontain   157604&lt;br /&gt;
*petit   151460&lt;br /&gt;
*martin   148328&lt;br /&gt;
*gaul   140728&lt;br /&gt;
*marseil   132682&lt;br /&gt;
*henri   126197&lt;br /&gt;
*75056   126166&lt;br /&gt;
*toulo   124260&lt;br /&gt;
*marechal   121251&lt;br /&gt;
*13055   121706&lt;br /&gt;
*francoi   95722&lt;br /&gt;
*vileneuv   88587&lt;br /&gt;
*leclerc   86265&lt;br /&gt;
*michel   84657&lt;br /&gt;
*toulous    82922&lt;br /&gt;
*principal   79712&lt;br /&gt;
*cote   77054&lt;br /&gt;
*mauric   76601&lt;br /&gt;
*joseph   76017&lt;br /&gt;
*albert   75560&lt;br /&gt;
*rose   73350&lt;br /&gt;
*nation   72777&lt;br /&gt;
*national   70177&lt;br /&gt;
*germain   64366&lt;br /&gt;
*havr   63465&lt;br /&gt;
*33063   63202&lt;br /&gt;
*foret   62521&lt;br /&gt;
*76351   60353&lt;br /&gt;
*laure   60243&lt;br /&gt;
*verdun   60034&lt;br /&gt;
*robe   59093&lt;br /&gt;
*lauren   58637&lt;br /&gt;
*mine   58423&lt;br /&gt;
*provenc   58235&lt;br /&gt;
*claud   57540&lt;br /&gt;
*colomb   56648&lt;br /&gt;
*sabl   55834&lt;br /&gt;
*lyon   55469&lt;br /&gt;
*chatel   55437&lt;br /&gt;
*laurent   55078&lt;br /&gt;
*quai   53053&lt;br /&gt;
*44109   52810&lt;br /&gt;
*epi   52666&lt;br /&gt;
*aube   52162&lt;br /&gt;
*august   51570&lt;br /&gt;
*guy   51558&lt;br /&gt;
*parc   51553&lt;br /&gt;
*roue   51505&lt;br /&gt;
*jardin   51078&lt;br /&gt;
*gambeta   50623&lt;br /&gt;
*59350   50235&lt;br /&gt;
*roy   50131&lt;/div&gt;</summary>
		<author><name>Najimou</name></author>	</entry>

	<entry>
		<id>http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=444</id>
		<title>JDONREFv4 plugin GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=444"/>
				<updated>2014-12-22T17:53:46Z</updated>
		
		<summary type="html">&lt;p&gt;Najimou : /* Un alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page est destinée aux utilisateurs confirmés d'ElasticSearch qui souhaitent utiliser JDONREF.&lt;br /&gt;
Si des éléments vous échappent dans cette page, je vous invite à revoir la page des [[JDONREFv4_Plugin_BeginnersMode|débutants]].&lt;br /&gt;
&lt;br /&gt;
L'utilisation du plugin JDONREFv4 nécessite :&lt;br /&gt;
* de disposer d'un cluster [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html elasticsearch] !&lt;br /&gt;
* d'installer le [[JDONREFv4_Plugin|plugin]] JDONREFv4 (voir [[JDONREFv4_Plugin#Installation_du_plugin| ici]])&lt;br /&gt;
* de créer le ou les index nécessaires&lt;br /&gt;
* de créer les mappings&lt;br /&gt;
* puis d'indexer le contenu&lt;br /&gt;
&lt;br /&gt;
Vous êtes ensuite libre d'effectuer les recherches souhaitées ! L'API elasticsearch peut bien sûr être utilisée, mais le plugin jdonrefv4 fourni un moyen de chercher efficacement des adresses (c'est à dire avec les résultats auxquels on devrait s'attendre).&lt;br /&gt;
Cette page suppose que le cluster elasticsearch et que le plugin jdonref (et éventuelles dépendances) sont installés.&lt;br /&gt;
&lt;br /&gt;
==== Création de l'index ====&lt;br /&gt;
&lt;br /&gt;
La version débutant de la création de l'index propose :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
&lt;br /&gt;
Vous pouvez noter plusieurs choses au sujet de cette configuration d'index :&lt;br /&gt;
* Les analyzers jdonrefv4_synonyme et jdonrefv4_nGram sont des versions améliorées des analyzers correspondant d'Elasticsearch. Si vous souhaitez utiliser des synonymes ou des nGrams avec JDONREF, ces variantes doivent être utilisées. Elles sont simplement compatibles avec les payloads.&lt;br /&gt;
* A noter que le metaphone n'est plus utilisé pour le moment, car combiné au ngram, il introduit un trop grand nombre de faux positifs. Vous pouvez toutefois le mettre en place à votre guise.&lt;br /&gt;
* Le &amp;quot;french_keywords&amp;quot; peut être rétabli si vous notez quelques mots auxquels l'application du stemmer ne fournis pas de bons résultats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le reste de cette page, cette installation est plusieurs fois remise en cause. Lisez jusqu'au bout.&lt;br /&gt;
&lt;br /&gt;
==== Un alias ====&lt;br /&gt;
&lt;br /&gt;
Ces remarques signifient surtout que ce plugin n'est qu'un outil. Vous pouvez l'utiliser à votre guise, modifier le fichier de configuration fourni, et adapter les analyzers à votre propre cas de figure.&lt;br /&gt;
&lt;br /&gt;
A titre d'exemple, vous souhaiterez sans doute effectuer des mises à jour de JDONREF. Si vous effectuez une mise à jour en masse de l'ensemble de vos adresses, vous aurez une interruption de service.&lt;br /&gt;
Plutôt que d'utiliser un index, elasticsearch vous propose d'utiliser un [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html alias] :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141201/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
  ... indexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot; : &amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot; : &amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Ce qui vous permettra d'utiliser l'alias &amp;quot;jdonref&amp;quot; tout comme un index, et de réindexer sous un autre nom pour effectuer une mise à jour :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141202/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.2/jdonrefv4-settings_beginner.&lt;br /&gt;
  ... réindexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141202&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}, {&amp;quot;remove&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si vous avez bien compris, il va vous falloir doubler votre DD, soit 200 Go pour la France entière.&lt;br /&gt;
&lt;br /&gt;
Bon. Cela dit j'avais présupposé dans l'introduction que vous étiez familiers de elasticsearch ... Vous ne m'y reprendrez plus. Passons aux choses sérieuses !&lt;br /&gt;
&lt;br /&gt;
==== Fréquences ====&lt;br /&gt;
&lt;br /&gt;
En tant que moteur de recherche à index inversé, ElasticSearch est efficace pour effectuer des recherches sur des termes peu fréquents, aussi nombreux soient-ils. Ses fonctionnalités de mises en cache permettent aussi d'obtenir de bonnes performances à l'usage sur les termes plus fréquents, et fréquemment utilisés.&lt;br /&gt;
&lt;br /&gt;
Quelques chiffres :&lt;br /&gt;
# 32 000 communes ;&lt;br /&gt;
# 1 200 000 voies ;&lt;br /&gt;
# 18 000 000 adresses ;&lt;br /&gt;
&lt;br /&gt;
Ce qui signifie une moyenne de 18 adresses pour une même voie. Ce qui signifie aussi une moyenne de 37 voies par commune (bien sûr parfois beaucoup plus !).&lt;br /&gt;
&lt;br /&gt;
En quoi est-ce important ?&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les communes : vous obtenez quelques dizaines de résultat (PARISIS, ...).&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les voies : vous en obtenez mécaniquement au moins 30 fois plus.&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les adresse : le facteur est de 600, soit un nombre à 5 chiffres.&lt;br /&gt;
&lt;br /&gt;
D'accord, ce n'est pas très impressionnant, mais PARIS n'est pas le terme le plus fréquent.&lt;br /&gt;
Lorsque vous cherchez &amp;quot;RUE&amp;quot; parmi les adresses, ceux sont 12 000 000 de documents qui sont concernés.&lt;br /&gt;
Sur ma plateforme de test de 6 coeurs virtuels, 40 Go de RAM, 5 shards, cela prend environ 2 minutes (si vous n'avez pas de timeout avant !) ...&lt;br /&gt;
&lt;br /&gt;
Vous avez alors deux stratégies :&lt;br /&gt;
* Elasticsearch est scalable ... et vous avez les moyens de le rendre scalable. Comptez 8 coeurs pour 8 départements. La recherche de toutes les RUE de France devient alors humainement possible. &lt;br /&gt;
* Vous tentez comme moi d'optimiser le tout.&lt;br /&gt;
&lt;br /&gt;
==== Optimisation ====&lt;br /&gt;
&lt;br /&gt;
   Le reste de cette page est en cours de rédaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour utiliser le paramètre maxSizePerType de la requête JDONREF, il est conseillé (obligatoire) de répartir les types sur de multiples index.&lt;br /&gt;
D'une manière générale, il est même plus que conseillé de répartir les communes, départements et pays sur un unique shard (avec des réplicats, et potentiellement sur différents index).&lt;br /&gt;
&lt;br /&gt;
A cet effet, et pour simplifier le fonctionnement de l'ensemble, il est possible d'utiliser des alias elasticsearch.&lt;br /&gt;
Un alias permet de &amp;quot;contenir&amp;quot; différent index.&lt;br /&gt;
Lorsqu'une requête est faite sur un alias, tous les index de l'alias sont requêtés (et le résultat aggrégé).&lt;br /&gt;
&lt;br /&gt;
Les index de mon cluster sont répartis ainsi (via un batch) :&lt;br /&gt;
&lt;br /&gt;
# alias jdonref&lt;br /&gt;
# index pays, 1 shard + 1 réplica&lt;br /&gt;
# index departement, 1 shard + 1 réplica&lt;br /&gt;
# index commune, 1 shard + 1 réplica&lt;br /&gt;
# index voie, 5 shards + 1 réplica&lt;br /&gt;
# index adresse, 5 shards + 1 réplica&lt;br /&gt;
# index poizon, 5 shards + 1 réplica&lt;br /&gt;
NB: Je n'indexe pas les troncons, je n'en ai pas l'usage.&lt;br /&gt;
NB: Notez que vous pourriez aussi choisir de regrouper pays, departement et commune. Il faut savoir que dans un même index, les fréquences des termes sont cumulés. Dans le même index, les communes auront donc une influence sur la fréquence des termes des pays. A vous de voir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela me permet de définir maxSizePerType à 5000 (voir [[JDONREFv4_Query#Optimisation | optimisation]]), pour éviter de polluer certaines requêtes avec des résultats d'adresse superflus.&lt;br /&gt;
Bien sûr, il est nécessaire d'adapter les requêtes de création des index, des mappings, et d'ajouter la création d'un alias.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour les index de pays, departement, commune, il s'agit simplement d'ajouter &amp;quot;number_of_shards&amp;quot; et &amp;quot;number_of_replicas&amp;quot;. Ici l'exemple incomplet de l'index des pays :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_pays/' -d '{&lt;br /&gt;
     &amp;quot;index&amp;quot; : {&lt;br /&gt;
        &amp;quot;number_of_shards&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;number_of_replicas&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;analysis&amp;quot; : {&lt;br /&gt;
            &amp;quot;analyzer&amp;quot;: {&lt;br /&gt;
                &amp;quot;jdonrefv4_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;whitespace&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;delimited_payload_filter&amp;quot;, &amp;quot;lowercase&amp;quot;, &amp;quot;french_elision&amp;quot;, &amp;quot;french_stop&amp;quot;, /*/&amp;quot;french_keywords&amp;quot;,*/ &amp;quot;french_stemmer&amp;quot;,&amp;quot;jdonrefv4_synonyme&amp;quot;, &amp;quot;jdonrefv4_nGram&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;jdonrefv4_codes_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;standard&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;standard&amp;quot;, &amp;quot;lowercase&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le mapping du pays doit bien sûr être réalisé sur l'index du pays ... &lt;br /&gt;
&lt;br /&gt;
  $ curl -XPUT 'http://localhost:9200/jdonref_pays/pays/_mapping' -d '{&lt;br /&gt;
    &amp;quot;pays&amp;quot;: {&lt;br /&gt;
       &amp;quot;_type&amp;quot;: {&amp;quot;store&amp;quot;: true},&lt;br /&gt;
      &amp;quot;_source&amp;quot;: {&amp;quot;excludes&amp;quot;: [&amp;quot;geometrie&amp;quot;]},&lt;br /&gt;
      &amp;quot;properties&amp;quot; : { &lt;br /&gt;
                           &amp;quot;code_pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_codes_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;index&amp;quot;: &amp;quot;no&amp;quot;},&lt;br /&gt;
                           &amp;quot;t0&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;t1&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;ligne7&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pin&amp;quot; : { &amp;quot;properties&amp;quot; : { &amp;quot;centroide&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_point&amp;quot; , &amp;quot;fielddata&amp;quot; : { &amp;quot;format&amp;quot; : &amp;quot;compressed&amp;quot; , &amp;quot;precision&amp;quot; : &amp;quot;1cm&amp;quot;}}}},&lt;br /&gt;
                           &amp;quot;geometrie&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_shape&amp;quot;, &amp;quot;precision&amp;quot;: &amp;quot;1cm&amp;quot;, &amp;quot;tree&amp;quot;: &amp;quot;quadtree&amp;quot;},&lt;br /&gt;
                           &amp;quot;fullName&amp;quot; : {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets_payloads&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index_token_count&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;}&lt;br /&gt;
                      },&lt;br /&gt;
      &amp;quot;transform&amp;quot; : {&lt;br /&gt;
          &amp;quot;lang&amp;quot; : &amp;quot;groovy&amp;quot;,&lt;br /&gt;
          &amp;quot;script&amp;quot; : &amp;quot;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'; };&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }'&lt;br /&gt;
&lt;br /&gt;
et enfin le pays peut être rattaché à l'alias jdonref :&lt;br /&gt;
&lt;br /&gt;
  $ curl -XPOST 'http://localhost:9200/_aliases' -d '{&lt;br /&gt;
  {&amp;quot;actions&amp;quot;:[{&amp;quot;add&amp;quot;:{&amp;quot;index&amp;quot;:&amp;quot;jdonref_pays&amp;quot;,&amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Idem pour les autres types (n'oubliez pas d'ajouter des shards pour les voies, adresses et poizon).&lt;br /&gt;
&lt;br /&gt;
Vous êtes alors prêt à utiliser une requête avec maxSizePerType comme [[JDONREFv4_Query#Optimisation | ici]].&lt;br /&gt;
&lt;br /&gt;
Pour être clair, avec maxSizePerType défini à 10 000, d'après les statistiques de fréquence fournies par elasticsearch sur la base IGN 2013, les adresses composées exclusivement des 84 termes suivant nécessiteront la saisie du code postal ou du code insee (sauf 6 communes pour lesquels le code insee est trop fréquent, voir la liste).&lt;br /&gt;
Chaque terme est présenté avec sa fréquence.&lt;br /&gt;
&lt;br /&gt;
*france      18934777&lt;br /&gt;
*rue          12000419&lt;br /&gt;
*avenue    1520128&lt;br /&gt;
*saint        2726561&lt;br /&gt;
*chemin    1357589&lt;br /&gt;
*route       1289752&lt;br /&gt;
*bis           1068563&lt;br /&gt;
*mont         726556&lt;br /&gt;
*impasse   724520&lt;br /&gt;
*jean      557596&lt;br /&gt;
*boulevard    475745&lt;br /&gt;
*grand   430452&lt;br /&gt;
*chateau      409622&lt;br /&gt;
*place   399026&lt;br /&gt;
*arondi   284874&lt;br /&gt;
*pont   247505&lt;br /&gt;
*tour   223095&lt;br /&gt;
*paul   222773&lt;br /&gt;
*cour   217926&lt;br /&gt;
*moulin   215612&lt;br /&gt;
*fer   215394&lt;br /&gt;
*champ   212369&lt;br /&gt;
*ter   211768&lt;br /&gt;
*general   199648&lt;br /&gt;
*george   197359&lt;br /&gt;
*pari   194572&lt;br /&gt;
*loui   193026&lt;br /&gt;
*marti   176915&lt;br /&gt;
*mare   173454&lt;br /&gt;
*mars   168783&lt;br /&gt;
*eglis   163259&lt;br /&gt;
*bourg   162933&lt;br /&gt;
*fontain   157604&lt;br /&gt;
*petit   151460&lt;br /&gt;
*martin   148328&lt;br /&gt;
*gaul   140728&lt;br /&gt;
*marseil   132682&lt;br /&gt;
*henri   126197&lt;br /&gt;
*75056   126166&lt;br /&gt;
*toulo   124260&lt;br /&gt;
*marechal   121251&lt;br /&gt;
*13055   121706&lt;br /&gt;
*francoi   95722&lt;br /&gt;
*vileneuv   88587&lt;br /&gt;
*leclerc   86265&lt;br /&gt;
*michel   84657&lt;br /&gt;
*toulous    82922&lt;br /&gt;
*principal   79712&lt;br /&gt;
*cote   77054&lt;br /&gt;
*mauric   76601&lt;br /&gt;
*joseph   76017&lt;br /&gt;
*albert   75560&lt;br /&gt;
*rose   73350&lt;br /&gt;
*nation   72777&lt;br /&gt;
*national   70177&lt;br /&gt;
*germain   64366&lt;br /&gt;
*havr   63465&lt;br /&gt;
*33063   63202&lt;br /&gt;
*foret   62521&lt;br /&gt;
*76351   60353&lt;br /&gt;
*laure   60243&lt;br /&gt;
*verdun   60034&lt;br /&gt;
*robe   59093&lt;br /&gt;
*lauren   58637&lt;br /&gt;
*mine   58423&lt;br /&gt;
*provenc   58235&lt;br /&gt;
*claud   57540&lt;br /&gt;
*colomb   56648&lt;br /&gt;
*sabl   55834&lt;br /&gt;
*lyon   55469&lt;br /&gt;
*chatel   55437&lt;br /&gt;
*laurent   55078&lt;br /&gt;
*quai   53053&lt;br /&gt;
*44109   52810&lt;br /&gt;
*epi   52666&lt;br /&gt;
*aube   52162&lt;br /&gt;
*august   51570&lt;br /&gt;
*guy   51558&lt;br /&gt;
*parc   51553&lt;br /&gt;
*roue   51505&lt;br /&gt;
*jardin   51078&lt;br /&gt;
*gambeta   50623&lt;br /&gt;
*59350   50235&lt;br /&gt;
*roy   50131&lt;/div&gt;</summary>
		<author><name>Najimou</name></author>	</entry>

	<entry>
		<id>http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=443</id>
		<title>JDONREFv4 plugin GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=443"/>
				<updated>2014-12-22T17:53:23Z</updated>
		
		<summary type="html">&lt;p&gt;Najimou : /* Un alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page est destinée aux utilisateurs confirmés d'ElasticSearch qui souhaitent utiliser JDONREF.&lt;br /&gt;
Si des éléments vous échappent dans cette page, je vous invite à revoir la page des [[JDONREFv4_Plugin_BeginnersMode|débutants]].&lt;br /&gt;
&lt;br /&gt;
L'utilisation du plugin JDONREFv4 nécessite :&lt;br /&gt;
* de disposer d'un cluster [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html elasticsearch] !&lt;br /&gt;
* d'installer le [[JDONREFv4_Plugin|plugin]] JDONREFv4 (voir [[JDONREFv4_Plugin#Installation_du_plugin| ici]])&lt;br /&gt;
* de créer le ou les index nécessaires&lt;br /&gt;
* de créer les mappings&lt;br /&gt;
* puis d'indexer le contenu&lt;br /&gt;
&lt;br /&gt;
Vous êtes ensuite libre d'effectuer les recherches souhaitées ! L'API elasticsearch peut bien sûr être utilisée, mais le plugin jdonrefv4 fourni un moyen de chercher efficacement des adresses (c'est à dire avec les résultats auxquels on devrait s'attendre).&lt;br /&gt;
Cette page suppose que le cluster elasticsearch et que le plugin jdonref (et éventuelles dépendances) sont installés.&lt;br /&gt;
&lt;br /&gt;
==== Création de l'index ====&lt;br /&gt;
&lt;br /&gt;
La version débutant de la création de l'index propose :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
&lt;br /&gt;
Vous pouvez noter plusieurs choses au sujet de cette configuration d'index :&lt;br /&gt;
* Les analyzers jdonrefv4_synonyme et jdonrefv4_nGram sont des versions améliorées des analyzers correspondant d'Elasticsearch. Si vous souhaitez utiliser des synonymes ou des nGrams avec JDONREF, ces variantes doivent être utilisées. Elles sont simplement compatibles avec les payloads.&lt;br /&gt;
* A noter que le metaphone n'est plus utilisé pour le moment, car combiné au ngram, il introduit un trop grand nombre de faux positifs. Vous pouvez toutefois le mettre en place à votre guise.&lt;br /&gt;
* Le &amp;quot;french_keywords&amp;quot; peut être rétabli si vous notez quelques mots auxquels l'application du stemmer ne fournis pas de bons résultats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le reste de cette page, cette installation est plusieurs fois remise en cause. Lisez jusqu'au bout.&lt;br /&gt;
&lt;br /&gt;
==== Un alias ====&lt;br /&gt;
&lt;br /&gt;
Ces remarques signifient surtout que ce plugin n'est qu'un outil. Vous pouvez l'utiliser à votre guise, modifier le fichier de configuration fourni, et adapter les analyzers à votre propre cas de figure.&lt;br /&gt;
&lt;br /&gt;
A titre d'exemple, vous souhaiterez sans doute effectuer des mises à jour de JDONREF. Si vous effectuez une mise à jour en masse de l'ensemble de vos adresses, vous aurez une interruption de service.&lt;br /&gt;
Plutôt que d'utiliser un index, elasticsearch vous propose d'utiliser un [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html alias] :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141201/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
  ... indexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot; : &amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot; : &amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Ce qui vous permettra d'utiliser l'alias &amp;quot;jdonref&amp;quot; tout comme un index, et de réindexer sous un autre nom pour effectuer une mise à jour :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141202/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.2/jdonrefv4-settings8beginner.&lt;br /&gt;
  ... réindexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141202&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}, {&amp;quot;remove&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si vous avez bien compris, il va vous falloir doubler votre DD, soit 200 Go pour la France entière.&lt;br /&gt;
&lt;br /&gt;
Bon. Cela dit j'avais présupposé dans l'introduction que vous étiez familiers de elasticsearch ... Vous ne m'y reprendrez plus. Passons aux choses sérieuses !&lt;br /&gt;
&lt;br /&gt;
==== Fréquences ====&lt;br /&gt;
&lt;br /&gt;
En tant que moteur de recherche à index inversé, ElasticSearch est efficace pour effectuer des recherches sur des termes peu fréquents, aussi nombreux soient-ils. Ses fonctionnalités de mises en cache permettent aussi d'obtenir de bonnes performances à l'usage sur les termes plus fréquents, et fréquemment utilisés.&lt;br /&gt;
&lt;br /&gt;
Quelques chiffres :&lt;br /&gt;
# 32 000 communes ;&lt;br /&gt;
# 1 200 000 voies ;&lt;br /&gt;
# 18 000 000 adresses ;&lt;br /&gt;
&lt;br /&gt;
Ce qui signifie une moyenne de 18 adresses pour une même voie. Ce qui signifie aussi une moyenne de 37 voies par commune (bien sûr parfois beaucoup plus !).&lt;br /&gt;
&lt;br /&gt;
En quoi est-ce important ?&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les communes : vous obtenez quelques dizaines de résultat (PARISIS, ...).&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les voies : vous en obtenez mécaniquement au moins 30 fois plus.&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les adresse : le facteur est de 600, soit un nombre à 5 chiffres.&lt;br /&gt;
&lt;br /&gt;
D'accord, ce n'est pas très impressionnant, mais PARIS n'est pas le terme le plus fréquent.&lt;br /&gt;
Lorsque vous cherchez &amp;quot;RUE&amp;quot; parmi les adresses, ceux sont 12 000 000 de documents qui sont concernés.&lt;br /&gt;
Sur ma plateforme de test de 6 coeurs virtuels, 40 Go de RAM, 5 shards, cela prend environ 2 minutes (si vous n'avez pas de timeout avant !) ...&lt;br /&gt;
&lt;br /&gt;
Vous avez alors deux stratégies :&lt;br /&gt;
* Elasticsearch est scalable ... et vous avez les moyens de le rendre scalable. Comptez 8 coeurs pour 8 départements. La recherche de toutes les RUE de France devient alors humainement possible. &lt;br /&gt;
* Vous tentez comme moi d'optimiser le tout.&lt;br /&gt;
&lt;br /&gt;
==== Optimisation ====&lt;br /&gt;
&lt;br /&gt;
   Le reste de cette page est en cours de rédaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour utiliser le paramètre maxSizePerType de la requête JDONREF, il est conseillé (obligatoire) de répartir les types sur de multiples index.&lt;br /&gt;
D'une manière générale, il est même plus que conseillé de répartir les communes, départements et pays sur un unique shard (avec des réplicats, et potentiellement sur différents index).&lt;br /&gt;
&lt;br /&gt;
A cet effet, et pour simplifier le fonctionnement de l'ensemble, il est possible d'utiliser des alias elasticsearch.&lt;br /&gt;
Un alias permet de &amp;quot;contenir&amp;quot; différent index.&lt;br /&gt;
Lorsqu'une requête est faite sur un alias, tous les index de l'alias sont requêtés (et le résultat aggrégé).&lt;br /&gt;
&lt;br /&gt;
Les index de mon cluster sont répartis ainsi (via un batch) :&lt;br /&gt;
&lt;br /&gt;
# alias jdonref&lt;br /&gt;
# index pays, 1 shard + 1 réplica&lt;br /&gt;
# index departement, 1 shard + 1 réplica&lt;br /&gt;
# index commune, 1 shard + 1 réplica&lt;br /&gt;
# index voie, 5 shards + 1 réplica&lt;br /&gt;
# index adresse, 5 shards + 1 réplica&lt;br /&gt;
# index poizon, 5 shards + 1 réplica&lt;br /&gt;
NB: Je n'indexe pas les troncons, je n'en ai pas l'usage.&lt;br /&gt;
NB: Notez que vous pourriez aussi choisir de regrouper pays, departement et commune. Il faut savoir que dans un même index, les fréquences des termes sont cumulés. Dans le même index, les communes auront donc une influence sur la fréquence des termes des pays. A vous de voir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela me permet de définir maxSizePerType à 5000 (voir [[JDONREFv4_Query#Optimisation | optimisation]]), pour éviter de polluer certaines requêtes avec des résultats d'adresse superflus.&lt;br /&gt;
Bien sûr, il est nécessaire d'adapter les requêtes de création des index, des mappings, et d'ajouter la création d'un alias.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour les index de pays, departement, commune, il s'agit simplement d'ajouter &amp;quot;number_of_shards&amp;quot; et &amp;quot;number_of_replicas&amp;quot;. Ici l'exemple incomplet de l'index des pays :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_pays/' -d '{&lt;br /&gt;
     &amp;quot;index&amp;quot; : {&lt;br /&gt;
        &amp;quot;number_of_shards&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;number_of_replicas&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;analysis&amp;quot; : {&lt;br /&gt;
            &amp;quot;analyzer&amp;quot;: {&lt;br /&gt;
                &amp;quot;jdonrefv4_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;whitespace&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;delimited_payload_filter&amp;quot;, &amp;quot;lowercase&amp;quot;, &amp;quot;french_elision&amp;quot;, &amp;quot;french_stop&amp;quot;, /*/&amp;quot;french_keywords&amp;quot;,*/ &amp;quot;french_stemmer&amp;quot;,&amp;quot;jdonrefv4_synonyme&amp;quot;, &amp;quot;jdonrefv4_nGram&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;jdonrefv4_codes_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;standard&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;standard&amp;quot;, &amp;quot;lowercase&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le mapping du pays doit bien sûr être réalisé sur l'index du pays ... &lt;br /&gt;
&lt;br /&gt;
  $ curl -XPUT 'http://localhost:9200/jdonref_pays/pays/_mapping' -d '{&lt;br /&gt;
    &amp;quot;pays&amp;quot;: {&lt;br /&gt;
       &amp;quot;_type&amp;quot;: {&amp;quot;store&amp;quot;: true},&lt;br /&gt;
      &amp;quot;_source&amp;quot;: {&amp;quot;excludes&amp;quot;: [&amp;quot;geometrie&amp;quot;]},&lt;br /&gt;
      &amp;quot;properties&amp;quot; : { &lt;br /&gt;
                           &amp;quot;code_pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_codes_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;index&amp;quot;: &amp;quot;no&amp;quot;},&lt;br /&gt;
                           &amp;quot;t0&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;t1&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;ligne7&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pin&amp;quot; : { &amp;quot;properties&amp;quot; : { &amp;quot;centroide&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_point&amp;quot; , &amp;quot;fielddata&amp;quot; : { &amp;quot;format&amp;quot; : &amp;quot;compressed&amp;quot; , &amp;quot;precision&amp;quot; : &amp;quot;1cm&amp;quot;}}}},&lt;br /&gt;
                           &amp;quot;geometrie&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_shape&amp;quot;, &amp;quot;precision&amp;quot;: &amp;quot;1cm&amp;quot;, &amp;quot;tree&amp;quot;: &amp;quot;quadtree&amp;quot;},&lt;br /&gt;
                           &amp;quot;fullName&amp;quot; : {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets_payloads&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index_token_count&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;}&lt;br /&gt;
                      },&lt;br /&gt;
      &amp;quot;transform&amp;quot; : {&lt;br /&gt;
          &amp;quot;lang&amp;quot; : &amp;quot;groovy&amp;quot;,&lt;br /&gt;
          &amp;quot;script&amp;quot; : &amp;quot;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'; };&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }'&lt;br /&gt;
&lt;br /&gt;
et enfin le pays peut être rattaché à l'alias jdonref :&lt;br /&gt;
&lt;br /&gt;
  $ curl -XPOST 'http://localhost:9200/_aliases' -d '{&lt;br /&gt;
  {&amp;quot;actions&amp;quot;:[{&amp;quot;add&amp;quot;:{&amp;quot;index&amp;quot;:&amp;quot;jdonref_pays&amp;quot;,&amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Idem pour les autres types (n'oubliez pas d'ajouter des shards pour les voies, adresses et poizon).&lt;br /&gt;
&lt;br /&gt;
Vous êtes alors prêt à utiliser une requête avec maxSizePerType comme [[JDONREFv4_Query#Optimisation | ici]].&lt;br /&gt;
&lt;br /&gt;
Pour être clair, avec maxSizePerType défini à 10 000, d'après les statistiques de fréquence fournies par elasticsearch sur la base IGN 2013, les adresses composées exclusivement des 84 termes suivant nécessiteront la saisie du code postal ou du code insee (sauf 6 communes pour lesquels le code insee est trop fréquent, voir la liste).&lt;br /&gt;
Chaque terme est présenté avec sa fréquence.&lt;br /&gt;
&lt;br /&gt;
*france      18934777&lt;br /&gt;
*rue          12000419&lt;br /&gt;
*avenue    1520128&lt;br /&gt;
*saint        2726561&lt;br /&gt;
*chemin    1357589&lt;br /&gt;
*route       1289752&lt;br /&gt;
*bis           1068563&lt;br /&gt;
*mont         726556&lt;br /&gt;
*impasse   724520&lt;br /&gt;
*jean      557596&lt;br /&gt;
*boulevard    475745&lt;br /&gt;
*grand   430452&lt;br /&gt;
*chateau      409622&lt;br /&gt;
*place   399026&lt;br /&gt;
*arondi   284874&lt;br /&gt;
*pont   247505&lt;br /&gt;
*tour   223095&lt;br /&gt;
*paul   222773&lt;br /&gt;
*cour   217926&lt;br /&gt;
*moulin   215612&lt;br /&gt;
*fer   215394&lt;br /&gt;
*champ   212369&lt;br /&gt;
*ter   211768&lt;br /&gt;
*general   199648&lt;br /&gt;
*george   197359&lt;br /&gt;
*pari   194572&lt;br /&gt;
*loui   193026&lt;br /&gt;
*marti   176915&lt;br /&gt;
*mare   173454&lt;br /&gt;
*mars   168783&lt;br /&gt;
*eglis   163259&lt;br /&gt;
*bourg   162933&lt;br /&gt;
*fontain   157604&lt;br /&gt;
*petit   151460&lt;br /&gt;
*martin   148328&lt;br /&gt;
*gaul   140728&lt;br /&gt;
*marseil   132682&lt;br /&gt;
*henri   126197&lt;br /&gt;
*75056   126166&lt;br /&gt;
*toulo   124260&lt;br /&gt;
*marechal   121251&lt;br /&gt;
*13055   121706&lt;br /&gt;
*francoi   95722&lt;br /&gt;
*vileneuv   88587&lt;br /&gt;
*leclerc   86265&lt;br /&gt;
*michel   84657&lt;br /&gt;
*toulous    82922&lt;br /&gt;
*principal   79712&lt;br /&gt;
*cote   77054&lt;br /&gt;
*mauric   76601&lt;br /&gt;
*joseph   76017&lt;br /&gt;
*albert   75560&lt;br /&gt;
*rose   73350&lt;br /&gt;
*nation   72777&lt;br /&gt;
*national   70177&lt;br /&gt;
*germain   64366&lt;br /&gt;
*havr   63465&lt;br /&gt;
*33063   63202&lt;br /&gt;
*foret   62521&lt;br /&gt;
*76351   60353&lt;br /&gt;
*laure   60243&lt;br /&gt;
*verdun   60034&lt;br /&gt;
*robe   59093&lt;br /&gt;
*lauren   58637&lt;br /&gt;
*mine   58423&lt;br /&gt;
*provenc   58235&lt;br /&gt;
*claud   57540&lt;br /&gt;
*colomb   56648&lt;br /&gt;
*sabl   55834&lt;br /&gt;
*lyon   55469&lt;br /&gt;
*chatel   55437&lt;br /&gt;
*laurent   55078&lt;br /&gt;
*quai   53053&lt;br /&gt;
*44109   52810&lt;br /&gt;
*epi   52666&lt;br /&gt;
*aube   52162&lt;br /&gt;
*august   51570&lt;br /&gt;
*guy   51558&lt;br /&gt;
*parc   51553&lt;br /&gt;
*roue   51505&lt;br /&gt;
*jardin   51078&lt;br /&gt;
*gambeta   50623&lt;br /&gt;
*59350   50235&lt;br /&gt;
*roy   50131&lt;/div&gt;</summary>
		<author><name>Najimou</name></author>	</entry>

	<entry>
		<id>http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=442</id>
		<title>JDONREFv4 plugin GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=442"/>
				<updated>2014-12-22T17:52:47Z</updated>
		
		<summary type="html">&lt;p&gt;Najimou : /* Un alias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page est destinée aux utilisateurs confirmés d'ElasticSearch qui souhaitent utiliser JDONREF.&lt;br /&gt;
Si des éléments vous échappent dans cette page, je vous invite à revoir la page des [[JDONREFv4_Plugin_BeginnersMode|débutants]].&lt;br /&gt;
&lt;br /&gt;
L'utilisation du plugin JDONREFv4 nécessite :&lt;br /&gt;
* de disposer d'un cluster [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html elasticsearch] !&lt;br /&gt;
* d'installer le [[JDONREFv4_Plugin|plugin]] JDONREFv4 (voir [[JDONREFv4_Plugin#Installation_du_plugin| ici]])&lt;br /&gt;
* de créer le ou les index nécessaires&lt;br /&gt;
* de créer les mappings&lt;br /&gt;
* puis d'indexer le contenu&lt;br /&gt;
&lt;br /&gt;
Vous êtes ensuite libre d'effectuer les recherches souhaitées ! L'API elasticsearch peut bien sûr être utilisée, mais le plugin jdonrefv4 fourni un moyen de chercher efficacement des adresses (c'est à dire avec les résultats auxquels on devrait s'attendre).&lt;br /&gt;
Cette page suppose que le cluster elasticsearch et que le plugin jdonref (et éventuelles dépendances) sont installés.&lt;br /&gt;
&lt;br /&gt;
==== Création de l'index ====&lt;br /&gt;
&lt;br /&gt;
La version débutant de la création de l'index propose :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
&lt;br /&gt;
Vous pouvez noter plusieurs choses au sujet de cette configuration d'index :&lt;br /&gt;
* Les analyzers jdonrefv4_synonyme et jdonrefv4_nGram sont des versions améliorées des analyzers correspondant d'Elasticsearch. Si vous souhaitez utiliser des synonymes ou des nGrams avec JDONREF, ces variantes doivent être utilisées. Elles sont simplement compatibles avec les payloads.&lt;br /&gt;
* A noter que le metaphone n'est plus utilisé pour le moment, car combiné au ngram, il introduit un trop grand nombre de faux positifs. Vous pouvez toutefois le mettre en place à votre guise.&lt;br /&gt;
* Le &amp;quot;french_keywords&amp;quot; peut être rétabli si vous notez quelques mots auxquels l'application du stemmer ne fournis pas de bons résultats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le reste de cette page, cette installation est plusieurs fois remise en cause. Lisez jusqu'au bout.&lt;br /&gt;
&lt;br /&gt;
==== Un alias ====&lt;br /&gt;
&lt;br /&gt;
Ces remarques signifient surtout que ce plugin n'est qu'un outil. Vous pouvez l'utiliser à votre guise, modifier le fichier de configuration fourni, et adapter les analyzers à votre propre cas de figure.&lt;br /&gt;
&lt;br /&gt;
A titre d'exemple, vous souhaiterez sans doute effectuer des mises à jour de JDONREF. Si vous effectuez une mise à jour en masse de l'ensemble de vos adresses, vous aurez une interruption de service.&lt;br /&gt;
Plutôt que d'utiliser un index, elasticsearch vous propose d'utiliser un [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html alias] :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141201/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
  ... indexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot; : &amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot; : &amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Ce qui vous permettra d'utiliser l'alias &amp;quot;jdonref&amp;quot; tout comme un index, et de réindexer sous un autre nom pour effectuer une mise à jour :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141202/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.2/jdonrefv'-settings8beginner.&lt;br /&gt;
  ... réindexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141202&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}, {&amp;quot;remove&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si vous avez bien compris, il va vous falloir doubler votre DD, soit 200 Go pour la France entière.&lt;br /&gt;
&lt;br /&gt;
Bon. Cela dit j'avais présupposé dans l'introduction que vous étiez familiers de elasticsearch ... Vous ne m'y reprendrez plus. Passons aux choses sérieuses !&lt;br /&gt;
&lt;br /&gt;
==== Fréquences ====&lt;br /&gt;
&lt;br /&gt;
En tant que moteur de recherche à index inversé, ElasticSearch est efficace pour effectuer des recherches sur des termes peu fréquents, aussi nombreux soient-ils. Ses fonctionnalités de mises en cache permettent aussi d'obtenir de bonnes performances à l'usage sur les termes plus fréquents, et fréquemment utilisés.&lt;br /&gt;
&lt;br /&gt;
Quelques chiffres :&lt;br /&gt;
# 32 000 communes ;&lt;br /&gt;
# 1 200 000 voies ;&lt;br /&gt;
# 18 000 000 adresses ;&lt;br /&gt;
&lt;br /&gt;
Ce qui signifie une moyenne de 18 adresses pour une même voie. Ce qui signifie aussi une moyenne de 37 voies par commune (bien sûr parfois beaucoup plus !).&lt;br /&gt;
&lt;br /&gt;
En quoi est-ce important ?&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les communes : vous obtenez quelques dizaines de résultat (PARISIS, ...).&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les voies : vous en obtenez mécaniquement au moins 30 fois plus.&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les adresse : le facteur est de 600, soit un nombre à 5 chiffres.&lt;br /&gt;
&lt;br /&gt;
D'accord, ce n'est pas très impressionnant, mais PARIS n'est pas le terme le plus fréquent.&lt;br /&gt;
Lorsque vous cherchez &amp;quot;RUE&amp;quot; parmi les adresses, ceux sont 12 000 000 de documents qui sont concernés.&lt;br /&gt;
Sur ma plateforme de test de 6 coeurs virtuels, 40 Go de RAM, 5 shards, cela prend environ 2 minutes (si vous n'avez pas de timeout avant !) ...&lt;br /&gt;
&lt;br /&gt;
Vous avez alors deux stratégies :&lt;br /&gt;
* Elasticsearch est scalable ... et vous avez les moyens de le rendre scalable. Comptez 8 coeurs pour 8 départements. La recherche de toutes les RUE de France devient alors humainement possible. &lt;br /&gt;
* Vous tentez comme moi d'optimiser le tout.&lt;br /&gt;
&lt;br /&gt;
==== Optimisation ====&lt;br /&gt;
&lt;br /&gt;
   Le reste de cette page est en cours de rédaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour utiliser le paramètre maxSizePerType de la requête JDONREF, il est conseillé (obligatoire) de répartir les types sur de multiples index.&lt;br /&gt;
D'une manière générale, il est même plus que conseillé de répartir les communes, départements et pays sur un unique shard (avec des réplicats, et potentiellement sur différents index).&lt;br /&gt;
&lt;br /&gt;
A cet effet, et pour simplifier le fonctionnement de l'ensemble, il est possible d'utiliser des alias elasticsearch.&lt;br /&gt;
Un alias permet de &amp;quot;contenir&amp;quot; différent index.&lt;br /&gt;
Lorsqu'une requête est faite sur un alias, tous les index de l'alias sont requêtés (et le résultat aggrégé).&lt;br /&gt;
&lt;br /&gt;
Les index de mon cluster sont répartis ainsi (via un batch) :&lt;br /&gt;
&lt;br /&gt;
# alias jdonref&lt;br /&gt;
# index pays, 1 shard + 1 réplica&lt;br /&gt;
# index departement, 1 shard + 1 réplica&lt;br /&gt;
# index commune, 1 shard + 1 réplica&lt;br /&gt;
# index voie, 5 shards + 1 réplica&lt;br /&gt;
# index adresse, 5 shards + 1 réplica&lt;br /&gt;
# index poizon, 5 shards + 1 réplica&lt;br /&gt;
NB: Je n'indexe pas les troncons, je n'en ai pas l'usage.&lt;br /&gt;
NB: Notez que vous pourriez aussi choisir de regrouper pays, departement et commune. Il faut savoir que dans un même index, les fréquences des termes sont cumulés. Dans le même index, les communes auront donc une influence sur la fréquence des termes des pays. A vous de voir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela me permet de définir maxSizePerType à 5000 (voir [[JDONREFv4_Query#Optimisation | optimisation]]), pour éviter de polluer certaines requêtes avec des résultats d'adresse superflus.&lt;br /&gt;
Bien sûr, il est nécessaire d'adapter les requêtes de création des index, des mappings, et d'ajouter la création d'un alias.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour les index de pays, departement, commune, il s'agit simplement d'ajouter &amp;quot;number_of_shards&amp;quot; et &amp;quot;number_of_replicas&amp;quot;. Ici l'exemple incomplet de l'index des pays :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_pays/' -d '{&lt;br /&gt;
     &amp;quot;index&amp;quot; : {&lt;br /&gt;
        &amp;quot;number_of_shards&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;number_of_replicas&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;analysis&amp;quot; : {&lt;br /&gt;
            &amp;quot;analyzer&amp;quot;: {&lt;br /&gt;
                &amp;quot;jdonrefv4_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;whitespace&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;delimited_payload_filter&amp;quot;, &amp;quot;lowercase&amp;quot;, &amp;quot;french_elision&amp;quot;, &amp;quot;french_stop&amp;quot;, /*/&amp;quot;french_keywords&amp;quot;,*/ &amp;quot;french_stemmer&amp;quot;,&amp;quot;jdonrefv4_synonyme&amp;quot;, &amp;quot;jdonrefv4_nGram&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;jdonrefv4_codes_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;standard&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;standard&amp;quot;, &amp;quot;lowercase&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le mapping du pays doit bien sûr être réalisé sur l'index du pays ... &lt;br /&gt;
&lt;br /&gt;
  $ curl -XPUT 'http://localhost:9200/jdonref_pays/pays/_mapping' -d '{&lt;br /&gt;
    &amp;quot;pays&amp;quot;: {&lt;br /&gt;
       &amp;quot;_type&amp;quot;: {&amp;quot;store&amp;quot;: true},&lt;br /&gt;
      &amp;quot;_source&amp;quot;: {&amp;quot;excludes&amp;quot;: [&amp;quot;geometrie&amp;quot;]},&lt;br /&gt;
      &amp;quot;properties&amp;quot; : { &lt;br /&gt;
                           &amp;quot;code_pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_codes_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;index&amp;quot;: &amp;quot;no&amp;quot;},&lt;br /&gt;
                           &amp;quot;t0&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;t1&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;ligne7&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pin&amp;quot; : { &amp;quot;properties&amp;quot; : { &amp;quot;centroide&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_point&amp;quot; , &amp;quot;fielddata&amp;quot; : { &amp;quot;format&amp;quot; : &amp;quot;compressed&amp;quot; , &amp;quot;precision&amp;quot; : &amp;quot;1cm&amp;quot;}}}},&lt;br /&gt;
                           &amp;quot;geometrie&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_shape&amp;quot;, &amp;quot;precision&amp;quot;: &amp;quot;1cm&amp;quot;, &amp;quot;tree&amp;quot;: &amp;quot;quadtree&amp;quot;},&lt;br /&gt;
                           &amp;quot;fullName&amp;quot; : {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets_payloads&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index_token_count&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;}&lt;br /&gt;
                      },&lt;br /&gt;
      &amp;quot;transform&amp;quot; : {&lt;br /&gt;
          &amp;quot;lang&amp;quot; : &amp;quot;groovy&amp;quot;,&lt;br /&gt;
          &amp;quot;script&amp;quot; : &amp;quot;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'; };&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }'&lt;br /&gt;
&lt;br /&gt;
et enfin le pays peut être rattaché à l'alias jdonref :&lt;br /&gt;
&lt;br /&gt;
  $ curl -XPOST 'http://localhost:9200/_aliases' -d '{&lt;br /&gt;
  {&amp;quot;actions&amp;quot;:[{&amp;quot;add&amp;quot;:{&amp;quot;index&amp;quot;:&amp;quot;jdonref_pays&amp;quot;,&amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Idem pour les autres types (n'oubliez pas d'ajouter des shards pour les voies, adresses et poizon).&lt;br /&gt;
&lt;br /&gt;
Vous êtes alors prêt à utiliser une requête avec maxSizePerType comme [[JDONREFv4_Query#Optimisation | ici]].&lt;br /&gt;
&lt;br /&gt;
Pour être clair, avec maxSizePerType défini à 10 000, d'après les statistiques de fréquence fournies par elasticsearch sur la base IGN 2013, les adresses composées exclusivement des 84 termes suivant nécessiteront la saisie du code postal ou du code insee (sauf 6 communes pour lesquels le code insee est trop fréquent, voir la liste).&lt;br /&gt;
Chaque terme est présenté avec sa fréquence.&lt;br /&gt;
&lt;br /&gt;
*france      18934777&lt;br /&gt;
*rue          12000419&lt;br /&gt;
*avenue    1520128&lt;br /&gt;
*saint        2726561&lt;br /&gt;
*chemin    1357589&lt;br /&gt;
*route       1289752&lt;br /&gt;
*bis           1068563&lt;br /&gt;
*mont         726556&lt;br /&gt;
*impasse   724520&lt;br /&gt;
*jean      557596&lt;br /&gt;
*boulevard    475745&lt;br /&gt;
*grand   430452&lt;br /&gt;
*chateau      409622&lt;br /&gt;
*place   399026&lt;br /&gt;
*arondi   284874&lt;br /&gt;
*pont   247505&lt;br /&gt;
*tour   223095&lt;br /&gt;
*paul   222773&lt;br /&gt;
*cour   217926&lt;br /&gt;
*moulin   215612&lt;br /&gt;
*fer   215394&lt;br /&gt;
*champ   212369&lt;br /&gt;
*ter   211768&lt;br /&gt;
*general   199648&lt;br /&gt;
*george   197359&lt;br /&gt;
*pari   194572&lt;br /&gt;
*loui   193026&lt;br /&gt;
*marti   176915&lt;br /&gt;
*mare   173454&lt;br /&gt;
*mars   168783&lt;br /&gt;
*eglis   163259&lt;br /&gt;
*bourg   162933&lt;br /&gt;
*fontain   157604&lt;br /&gt;
*petit   151460&lt;br /&gt;
*martin   148328&lt;br /&gt;
*gaul   140728&lt;br /&gt;
*marseil   132682&lt;br /&gt;
*henri   126197&lt;br /&gt;
*75056   126166&lt;br /&gt;
*toulo   124260&lt;br /&gt;
*marechal   121251&lt;br /&gt;
*13055   121706&lt;br /&gt;
*francoi   95722&lt;br /&gt;
*vileneuv   88587&lt;br /&gt;
*leclerc   86265&lt;br /&gt;
*michel   84657&lt;br /&gt;
*toulous    82922&lt;br /&gt;
*principal   79712&lt;br /&gt;
*cote   77054&lt;br /&gt;
*mauric   76601&lt;br /&gt;
*joseph   76017&lt;br /&gt;
*albert   75560&lt;br /&gt;
*rose   73350&lt;br /&gt;
*nation   72777&lt;br /&gt;
*national   70177&lt;br /&gt;
*germain   64366&lt;br /&gt;
*havr   63465&lt;br /&gt;
*33063   63202&lt;br /&gt;
*foret   62521&lt;br /&gt;
*76351   60353&lt;br /&gt;
*laure   60243&lt;br /&gt;
*verdun   60034&lt;br /&gt;
*robe   59093&lt;br /&gt;
*lauren   58637&lt;br /&gt;
*mine   58423&lt;br /&gt;
*provenc   58235&lt;br /&gt;
*claud   57540&lt;br /&gt;
*colomb   56648&lt;br /&gt;
*sabl   55834&lt;br /&gt;
*lyon   55469&lt;br /&gt;
*chatel   55437&lt;br /&gt;
*laurent   55078&lt;br /&gt;
*quai   53053&lt;br /&gt;
*44109   52810&lt;br /&gt;
*epi   52666&lt;br /&gt;
*aube   52162&lt;br /&gt;
*august   51570&lt;br /&gt;
*guy   51558&lt;br /&gt;
*parc   51553&lt;br /&gt;
*roue   51505&lt;br /&gt;
*jardin   51078&lt;br /&gt;
*gambeta   50623&lt;br /&gt;
*59350   50235&lt;br /&gt;
*roy   50131&lt;/div&gt;</summary>
		<author><name>Najimou</name></author>	</entry>

	<entry>
		<id>http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=441</id>
		<title>JDONREFv4 plugin GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://51.178.9.239/plugins/mediawiki/wiki/jdonref-v2/index.php?title=JDONREFv4_plugin_GettingStarted&amp;diff=441"/>
				<updated>2014-12-22T17:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Najimou : /* Création de l'index */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page est destinée aux utilisateurs confirmés d'ElasticSearch qui souhaitent utiliser JDONREF.&lt;br /&gt;
Si des éléments vous échappent dans cette page, je vous invite à revoir la page des [[JDONREFv4_Plugin_BeginnersMode|débutants]].&lt;br /&gt;
&lt;br /&gt;
L'utilisation du plugin JDONREFv4 nécessite :&lt;br /&gt;
* de disposer d'un cluster [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html elasticsearch] !&lt;br /&gt;
* d'installer le [[JDONREFv4_Plugin|plugin]] JDONREFv4 (voir [[JDONREFv4_Plugin#Installation_du_plugin| ici]])&lt;br /&gt;
* de créer le ou les index nécessaires&lt;br /&gt;
* de créer les mappings&lt;br /&gt;
* puis d'indexer le contenu&lt;br /&gt;
&lt;br /&gt;
Vous êtes ensuite libre d'effectuer les recherches souhaitées ! L'API elasticsearch peut bien sûr être utilisée, mais le plugin jdonrefv4 fourni un moyen de chercher efficacement des adresses (c'est à dire avec les résultats auxquels on devrait s'attendre).&lt;br /&gt;
Cette page suppose que le cluster elasticsearch et que le plugin jdonref (et éventuelles dépendances) sont installés.&lt;br /&gt;
&lt;br /&gt;
==== Création de l'index ====&lt;br /&gt;
&lt;br /&gt;
La version débutant de la création de l'index propose :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonrefv4-settings_beginner.json&lt;br /&gt;
&lt;br /&gt;
Vous pouvez noter plusieurs choses au sujet de cette configuration d'index :&lt;br /&gt;
* Les analyzers jdonrefv4_synonyme et jdonrefv4_nGram sont des versions améliorées des analyzers correspondant d'Elasticsearch. Si vous souhaitez utiliser des synonymes ou des nGrams avec JDONREF, ces variantes doivent être utilisées. Elles sont simplement compatibles avec les payloads.&lt;br /&gt;
* A noter que le metaphone n'est plus utilisé pour le moment, car combiné au ngram, il introduit un trop grand nombre de faux positifs. Vous pouvez toutefois le mettre en place à votre guise.&lt;br /&gt;
* Le &amp;quot;french_keywords&amp;quot; peut être rétabli si vous notez quelques mots auxquels l'application du stemmer ne fournis pas de bons résultats.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le reste de cette page, cette installation est plusieurs fois remise en cause. Lisez jusqu'au bout.&lt;br /&gt;
&lt;br /&gt;
==== Un alias ====&lt;br /&gt;
&lt;br /&gt;
Ces remarques signifient surtout que ce plugin n'est qu'un outil. Vous pouvez l'utiliser à votre guise, modifier le fichier de configuration fourni, et adapter les analyzers à votre propre cas de figure.&lt;br /&gt;
&lt;br /&gt;
A titre d'exemple, vous souhaiterez sans doute effectuer des mises à jour de JDONREF. Si vous effectuez une mise à jour en masse de l'ensemble de vos adresses, vous aurez une interruption de service.&lt;br /&gt;
Plutôt que d'utiliser un index, elasticsearch vous propose d'utiliser un [http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-aliases.html alias] :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141201/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.3/jdonref-settings-beginner.json&lt;br /&gt;
  ... indexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot; : &amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot; : &amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Ce qui vous permettra d'utiliser l'alias &amp;quot;jdonref&amp;quot; tout comme un index, et de réindexer sous un autre nom pour effectuer une mise à jour :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_20141202/' -d @/usr/share/elasticsearch/plugins/jdonrefv4-0.2/jdonref-settings-beginner.&lt;br /&gt;
  ... réindexation ...&lt;br /&gt;
  curl -XPOST 'http://localhost:9200/_aliases/' -d '{ &amp;quot;actions&amp;quot; : [ {&amp;quot;add&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141202&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}, {&amp;quot;remove&amp;quot; : {&amp;quot;index&amp;quot;:&amp;quot;jdonref_20141201&amp;quot;, &amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si vous avez bien compris, il va vous falloir doubler votre DD, soit 200 Go pour la France entière.&lt;br /&gt;
&lt;br /&gt;
Bon. Cela dit j'avais présupposé dans l'introduction que vous étiez familiers de elasticsearch ... Vous ne m'y reprendrez plus. Passons aux choses sérieuses !&lt;br /&gt;
&lt;br /&gt;
==== Fréquences ====&lt;br /&gt;
&lt;br /&gt;
En tant que moteur de recherche à index inversé, ElasticSearch est efficace pour effectuer des recherches sur des termes peu fréquents, aussi nombreux soient-ils. Ses fonctionnalités de mises en cache permettent aussi d'obtenir de bonnes performances à l'usage sur les termes plus fréquents, et fréquemment utilisés.&lt;br /&gt;
&lt;br /&gt;
Quelques chiffres :&lt;br /&gt;
# 32 000 communes ;&lt;br /&gt;
# 1 200 000 voies ;&lt;br /&gt;
# 18 000 000 adresses ;&lt;br /&gt;
&lt;br /&gt;
Ce qui signifie une moyenne de 18 adresses pour une même voie. Ce qui signifie aussi une moyenne de 37 voies par commune (bien sûr parfois beaucoup plus !).&lt;br /&gt;
&lt;br /&gt;
En quoi est-ce important ?&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les communes : vous obtenez quelques dizaines de résultat (PARISIS, ...).&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les voies : vous en obtenez mécaniquement au moins 30 fois plus.&lt;br /&gt;
Cherchez &amp;quot;PARIS&amp;quot; parmi les adresse : le facteur est de 600, soit un nombre à 5 chiffres.&lt;br /&gt;
&lt;br /&gt;
D'accord, ce n'est pas très impressionnant, mais PARIS n'est pas le terme le plus fréquent.&lt;br /&gt;
Lorsque vous cherchez &amp;quot;RUE&amp;quot; parmi les adresses, ceux sont 12 000 000 de documents qui sont concernés.&lt;br /&gt;
Sur ma plateforme de test de 6 coeurs virtuels, 40 Go de RAM, 5 shards, cela prend environ 2 minutes (si vous n'avez pas de timeout avant !) ...&lt;br /&gt;
&lt;br /&gt;
Vous avez alors deux stratégies :&lt;br /&gt;
* Elasticsearch est scalable ... et vous avez les moyens de le rendre scalable. Comptez 8 coeurs pour 8 départements. La recherche de toutes les RUE de France devient alors humainement possible. &lt;br /&gt;
* Vous tentez comme moi d'optimiser le tout.&lt;br /&gt;
&lt;br /&gt;
==== Optimisation ====&lt;br /&gt;
&lt;br /&gt;
   Le reste de cette page est en cours de rédaction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour utiliser le paramètre maxSizePerType de la requête JDONREF, il est conseillé (obligatoire) de répartir les types sur de multiples index.&lt;br /&gt;
D'une manière générale, il est même plus que conseillé de répartir les communes, départements et pays sur un unique shard (avec des réplicats, et potentiellement sur différents index).&lt;br /&gt;
&lt;br /&gt;
A cet effet, et pour simplifier le fonctionnement de l'ensemble, il est possible d'utiliser des alias elasticsearch.&lt;br /&gt;
Un alias permet de &amp;quot;contenir&amp;quot; différent index.&lt;br /&gt;
Lorsqu'une requête est faite sur un alias, tous les index de l'alias sont requêtés (et le résultat aggrégé).&lt;br /&gt;
&lt;br /&gt;
Les index de mon cluster sont répartis ainsi (via un batch) :&lt;br /&gt;
&lt;br /&gt;
# alias jdonref&lt;br /&gt;
# index pays, 1 shard + 1 réplica&lt;br /&gt;
# index departement, 1 shard + 1 réplica&lt;br /&gt;
# index commune, 1 shard + 1 réplica&lt;br /&gt;
# index voie, 5 shards + 1 réplica&lt;br /&gt;
# index adresse, 5 shards + 1 réplica&lt;br /&gt;
# index poizon, 5 shards + 1 réplica&lt;br /&gt;
NB: Je n'indexe pas les troncons, je n'en ai pas l'usage.&lt;br /&gt;
NB: Notez que vous pourriez aussi choisir de regrouper pays, departement et commune. Il faut savoir que dans un même index, les fréquences des termes sont cumulés. Dans le même index, les communes auront donc une influence sur la fréquence des termes des pays. A vous de voir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela me permet de définir maxSizePerType à 5000 (voir [[JDONREFv4_Query#Optimisation | optimisation]]), pour éviter de polluer certaines requêtes avec des résultats d'adresse superflus.&lt;br /&gt;
Bien sûr, il est nécessaire d'adapter les requêtes de création des index, des mappings, et d'ajouter la création d'un alias.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour les index de pays, departement, commune, il s'agit simplement d'ajouter &amp;quot;number_of_shards&amp;quot; et &amp;quot;number_of_replicas&amp;quot;. Ici l'exemple incomplet de l'index des pays :&lt;br /&gt;
&lt;br /&gt;
  curl -XPUT 'http://localhost:9200/jdonref_pays/' -d '{&lt;br /&gt;
     &amp;quot;index&amp;quot; : {&lt;br /&gt;
        &amp;quot;number_of_shards&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;number_of_replicas&amp;quot; : 1,&lt;br /&gt;
        &amp;quot;analysis&amp;quot; : {&lt;br /&gt;
            &amp;quot;analyzer&amp;quot;: {&lt;br /&gt;
                &amp;quot;jdonrefv4_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;whitespace&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;delimited_payload_filter&amp;quot;, &amp;quot;lowercase&amp;quot;, &amp;quot;french_elision&amp;quot;, &amp;quot;french_stop&amp;quot;, /*/&amp;quot;french_keywords&amp;quot;,*/ &amp;quot;french_stemmer&amp;quot;,&amp;quot;jdonrefv4_synonyme&amp;quot;, &amp;quot;jdonrefv4_nGram&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;jdonrefv4_codes_index&amp;quot; : {&lt;br /&gt;
                    &amp;quot;type&amp;quot; : &amp;quot;custom&amp;quot;,&lt;br /&gt;
                    &amp;quot;tokenizer&amp;quot; : &amp;quot;standard&amp;quot;,&lt;br /&gt;
                    &amp;quot;filter&amp;quot; : [&amp;quot;standard&amp;quot;, &amp;quot;lowercase&amp;quot;]&lt;br /&gt;
                },&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le mapping du pays doit bien sûr être réalisé sur l'index du pays ... &lt;br /&gt;
&lt;br /&gt;
  $ curl -XPUT 'http://localhost:9200/jdonref_pays/pays/_mapping' -d '{&lt;br /&gt;
    &amp;quot;pays&amp;quot;: {&lt;br /&gt;
       &amp;quot;_type&amp;quot;: {&amp;quot;store&amp;quot;: true},&lt;br /&gt;
      &amp;quot;_source&amp;quot;: {&amp;quot;excludes&amp;quot;: [&amp;quot;geometrie&amp;quot;]},&lt;br /&gt;
      &amp;quot;properties&amp;quot; : { &lt;br /&gt;
                           &amp;quot;code_pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_codes_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pays&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot; , &amp;quot;index&amp;quot;: &amp;quot;no&amp;quot;},&lt;br /&gt;
                           &amp;quot;t0&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;t1&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;date&amp;quot;, &amp;quot;format&amp;quot;: &amp;quot;YYYY-MM-dd HH:mm:ss&amp;quot;, &amp;quot;index&amp;quot;:&amp;quot;not_analyzed&amp;quot;},&lt;br /&gt;
                           &amp;quot;ligne7&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;},&lt;br /&gt;
                           &amp;quot;pin&amp;quot; : { &amp;quot;properties&amp;quot; : { &amp;quot;centroide&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_point&amp;quot; , &amp;quot;fielddata&amp;quot; : { &amp;quot;format&amp;quot; : &amp;quot;compressed&amp;quot; , &amp;quot;precision&amp;quot; : &amp;quot;1cm&amp;quot;}}}},&lt;br /&gt;
                           &amp;quot;geometrie&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;geo_shape&amp;quot;, &amp;quot;precision&amp;quot;: &amp;quot;1cm&amp;quot;, &amp;quot;tree&amp;quot;: &amp;quot;quadtree&amp;quot;},&lt;br /&gt;
                           &amp;quot;fullName&amp;quot; : {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;, &amp;quot;term_vector&amp;quot; : &amp;quot;with_positions_offsets_payloads&amp;quot;, &amp;quot;index_analyzer&amp;quot;:&amp;quot;jdonrefv4_index_token_count&amp;quot;,&amp;quot;search_analyzer&amp;quot;:&amp;quot;jdonrefv4_search&amp;quot;, &amp;quot;similarity&amp;quot;:&amp;quot;jdonrefv4&amp;quot;}&lt;br /&gt;
                      },&lt;br /&gt;
      &amp;quot;transform&amp;quot; : {&lt;br /&gt;
          &amp;quot;lang&amp;quot; : &amp;quot;groovy&amp;quot;,&lt;br /&gt;
          &amp;quot;script&amp;quot; : &amp;quot;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'; };&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }'&lt;br /&gt;
&lt;br /&gt;
et enfin le pays peut être rattaché à l'alias jdonref :&lt;br /&gt;
&lt;br /&gt;
  $ curl -XPOST 'http://localhost:9200/_aliases' -d '{&lt;br /&gt;
  {&amp;quot;actions&amp;quot;:[{&amp;quot;add&amp;quot;:{&amp;quot;index&amp;quot;:&amp;quot;jdonref_pays&amp;quot;,&amp;quot;alias&amp;quot;:&amp;quot;jdonref&amp;quot;}}]}'&lt;br /&gt;
&lt;br /&gt;
Idem pour les autres types (n'oubliez pas d'ajouter des shards pour les voies, adresses et poizon).&lt;br /&gt;
&lt;br /&gt;
Vous êtes alors prêt à utiliser une requête avec maxSizePerType comme [[JDONREFv4_Query#Optimisation | ici]].&lt;br /&gt;
&lt;br /&gt;
Pour être clair, avec maxSizePerType défini à 10 000, d'après les statistiques de fréquence fournies par elasticsearch sur la base IGN 2013, les adresses composées exclusivement des 84 termes suivant nécessiteront la saisie du code postal ou du code insee (sauf 6 communes pour lesquels le code insee est trop fréquent, voir la liste).&lt;br /&gt;
Chaque terme est présenté avec sa fréquence.&lt;br /&gt;
&lt;br /&gt;
*france      18934777&lt;br /&gt;
*rue          12000419&lt;br /&gt;
*avenue    1520128&lt;br /&gt;
*saint        2726561&lt;br /&gt;
*chemin    1357589&lt;br /&gt;
*route       1289752&lt;br /&gt;
*bis           1068563&lt;br /&gt;
*mont         726556&lt;br /&gt;
*impasse   724520&lt;br /&gt;
*jean      557596&lt;br /&gt;
*boulevard    475745&lt;br /&gt;
*grand   430452&lt;br /&gt;
*chateau      409622&lt;br /&gt;
*place   399026&lt;br /&gt;
*arondi   284874&lt;br /&gt;
*pont   247505&lt;br /&gt;
*tour   223095&lt;br /&gt;
*paul   222773&lt;br /&gt;
*cour   217926&lt;br /&gt;
*moulin   215612&lt;br /&gt;
*fer   215394&lt;br /&gt;
*champ   212369&lt;br /&gt;
*ter   211768&lt;br /&gt;
*general   199648&lt;br /&gt;
*george   197359&lt;br /&gt;
*pari   194572&lt;br /&gt;
*loui   193026&lt;br /&gt;
*marti   176915&lt;br /&gt;
*mare   173454&lt;br /&gt;
*mars   168783&lt;br /&gt;
*eglis   163259&lt;br /&gt;
*bourg   162933&lt;br /&gt;
*fontain   157604&lt;br /&gt;
*petit   151460&lt;br /&gt;
*martin   148328&lt;br /&gt;
*gaul   140728&lt;br /&gt;
*marseil   132682&lt;br /&gt;
*henri   126197&lt;br /&gt;
*75056   126166&lt;br /&gt;
*toulo   124260&lt;br /&gt;
*marechal   121251&lt;br /&gt;
*13055   121706&lt;br /&gt;
*francoi   95722&lt;br /&gt;
*vileneuv   88587&lt;br /&gt;
*leclerc   86265&lt;br /&gt;
*michel   84657&lt;br /&gt;
*toulous    82922&lt;br /&gt;
*principal   79712&lt;br /&gt;
*cote   77054&lt;br /&gt;
*mauric   76601&lt;br /&gt;
*joseph   76017&lt;br /&gt;
*albert   75560&lt;br /&gt;
*rose   73350&lt;br /&gt;
*nation   72777&lt;br /&gt;
*national   70177&lt;br /&gt;
*germain   64366&lt;br /&gt;
*havr   63465&lt;br /&gt;
*33063   63202&lt;br /&gt;
*foret   62521&lt;br /&gt;
*76351   60353&lt;br /&gt;
*laure   60243&lt;br /&gt;
*verdun   60034&lt;br /&gt;
*robe   59093&lt;br /&gt;
*lauren   58637&lt;br /&gt;
*mine   58423&lt;br /&gt;
*provenc   58235&lt;br /&gt;
*claud   57540&lt;br /&gt;
*colomb   56648&lt;br /&gt;
*sabl   55834&lt;br /&gt;
*lyon   55469&lt;br /&gt;
*chatel   55437&lt;br /&gt;
*laurent   55078&lt;br /&gt;
*quai   53053&lt;br /&gt;
*44109   52810&lt;br /&gt;
*epi   52666&lt;br /&gt;
*aube   52162&lt;br /&gt;
*august   51570&lt;br /&gt;
*guy   51558&lt;br /&gt;
*parc   51553&lt;br /&gt;
*roue   51505&lt;br /&gt;
*jardin   51078&lt;br /&gt;
*gambeta   50623&lt;br /&gt;
*59350   50235&lt;br /&gt;
*roy   50131&lt;/div&gt;</summary>
		<author><name>Najimou</name></author>	</entry>

	</feed>