<commit_before># Elasticsearch


[Elasticsearch](http://www.elasticsearch.org/) est un moteur de recherche
distribué basé sur Lucene qui offre une API JSON RESTful et une quantité assez
impressionnante d'options de recherches. Il est très simple à mettre en place
et s'est imposé chez nous comme la solution de référence dès que nous avons une
recherche un peu évoluée à mettre en place.

## Installation


### Pour une installation en local

Le plus simple pour une installation en local est d'utiliser [Desi](https://github.com/AF83/desi) :

```shell
gem install desi && desi install
```

Par défaut, Desi installera ES dans le répertoire `$HOME/elasticsearch`, mais
on peut facilement [changer ce paramètre](https://github.com/AF83/desi#change-settings).

Une fois ES installé par Desi, on peut très simplement à la fois le lancer et
afficher les logs en faisant `desi start --tail`. Pour arrêter le démon, faire
`desi stop`, tout simplement. Pour les autres options proposées par Desi,
référez-vous à [la page du projet](https://github.com/AF83/desi).

Par défaut, Elasticsearch tournera sur le port 9200 de _localhost_.

### Installation sur un serveur

Le plus simple est de récupérer l'archive deb
[directement depuis la page _download_ du projet](http://www.elasticsearch.org/download/).

L'installation est là aussi très simple. On peut se référer à [la page
correspondante sur le site du projet](http://www.elasticsearch.org/guide/reference/setup/installation.html)
pour plus de détails.

### Gotcha

Bien que des optimisations aient été apportées pour diminuer sa gourmandise en
la matière, ES fait une consommation importante de descripteurs de fichiers.
Les réglages par défaut du nombre maximum de descripteurs de fichiers autorisés
par utilisateur sur un système Linux sont généralement rapidement atteints,
avec comme conséquence le message d'erreur `Too many open files`.

Pour prévenir ce problème, il convient donc d'augmenter cette limite pour
l'utilisateur qui lancera le démon Elasticsearch. La documentation du projet
recommande de le hausser à 32 000, voir 64 000. Sur un système Linux, il
faudra modifier le fichier `/etc/security/limits.conf`. Cela donne par exemple
chez moi :

```
drr  soft  nofile    8192
drr  hard  nofile    65536
```

## Plugins

Il existe [un grand nombre de plugins](http://www.elasticsearch.org/guide/reference/modules/plugins.html)
parmi lesquels quelques-uns peuvent être utiles pour l'administration au
quotidien :

* [elasticsearch-head](https://github.com/mobz/elasticsearch-head)
* [elasticsearch-inquisitor](https://github.com/polyfractal/elasticsearch-inquisitor)
* [bigdesk](https://github.com/lukas-vlcek/bigdesk)
* [paramedic](https://github.com/karmi/elasticsearch-paramedic)

Pour installer un plugin, il faut aller dans le répertoire où est installé ES
et lancer la commande `bin/plugin install github_user/github_repo`. Par
exemple, pour installer les plugins mentionnés ci-dessus avec une installation
typique faite par Desi, on peut faire :

```shell
$ cd ~/elasticsearch/current
$ bin/plugin install mobz/elasticsearch-head
$ bin/plugin install polyfractal/elasticsearch-inquisitor
$ bin/plugin install lukas-vlcek/bigdesk
$ bin/plugin install karmi/elasticsearch-paramedic
```

Ces plugins seront accessibles sur les URLs suivantes :

* http://localhost:9200/_plugin/head/
* http://localhost:9200/_plugin/inquisitor/
* http://localhost:9200/_plugin/bigdesk/
* http://localhost:9200/_plugin/paramedic/



## Bonnes pratiques


### Se méfier des erreurs de mapping

Les erreurs de
[mapping](http://www.elasticsearch.org/guide/reference/mapping/index.html) sont<commit_msg>very minor markdown syntax improvement<commit_after># Elasticsearch


[Elasticsearch](http://www.elasticsearch.org/) est un moteur de recherche
distribué basé sur Lucene qui offre une API JSON RESTful et une quantité assez
impressionnante d'options de recherches. Il est très simple à mettre en place
et s'est imposé chez nous comme la solution de référence dès que nous avons une
recherche un peu évoluée à mettre en place.

## Installation


### Pour une installation en local

Le plus simple pour une installation en local est d'utiliser [Desi](https://github.com/AF83/desi) :

```shell
gem install desi && desi install
```

Par défaut, Desi installera ES dans le répertoire `$HOME/elasticsearch`, mais
on peut facilement [changer ce paramètre](https://github.com/AF83/desi#change-settings).

Une fois ES installé par Desi, on peut très simplement à la fois le lancer et
afficher les logs en faisant `desi start --tail`. Pour arrêter le démon, faire
`desi stop`, tout simplement. Pour les autres options proposées par Desi,
référez-vous à [la page du projet](https://github.com/AF83/desi).

Par défaut, Elasticsearch tournera sur le port 9200 de _localhost_.

### Installation sur un serveur

Le plus simple est de récupérer l'archive deb
[directement depuis la page _download_ du projet](http://www.elasticsearch.org/download/).

L'installation est là aussi très simple. On peut se référer à [la page
correspondante sur le site du projet](http://www.elasticsearch.org/guide/reference/setup/installation.html)
pour plus de détails.

### Gotcha

Bien que des optimisations aient été apportées pour diminuer sa gourmandise en
la matière, ES fait une consommation importante de descripteurs de fichiers.
Les réglages par défaut du nombre maximum de descripteurs de fichiers autorisés
par utilisateur sur un système Linux sont généralement rapidement atteints,
avec comme conséquence le message d'erreur `Too many open files`.

Pour prévenir ce problème, il convient donc d'augmenter cette limite pour
l'utilisateur qui lancera le démon Elasticsearch. La documentation du projet
recommande de le hausser à 32 000, voir 64 000. Sur un système Linux, il
faudra modifier le fichier `/etc/security/limits.conf`. Cela donne par exemple
chez moi :

```
drr  soft  nofile    8192
drr  hard  nofile    65536
```

## Plugins

Il existe [un grand nombre de plugins](http://www.elasticsearch.org/guide/reference/modules/plugins.html)
parmi lesquels quelques-uns peuvent être utiles pour l'administration au
quotidien :

* [elasticsearch-head](https://github.com/mobz/elasticsearch-head)
* [elasticsearch-inquisitor](https://github.com/polyfractal/elasticsearch-inquisitor)
* [bigdesk](https://github.com/lukas-vlcek/bigdesk)
* [paramedic](https://github.com/karmi/elasticsearch-paramedic)

Pour installer un plugin, il faut aller dans le répertoire où est installé ES
et lancer la commande `bin/plugin install github_user/github_repo`. Par
exemple, pour installer les plugins mentionnés ci-dessus avec une installation
typique faite par Desi, on peut faire :

```shell
$ cd ~/elasticsearch/current
$ bin/plugin install mobz/elasticsearch-head
$ bin/plugin install polyfractal/elasticsearch-inquisitor
$ bin/plugin install lukas-vlcek/bigdesk
$ bin/plugin install karmi/elasticsearch-paramedic
```

Ces plugins seront accessibles sur les URLs suivantes :

* http://localhost:9200/\_plugin/head/
* http://localhost:9200/\_plugin/inquisitor/
* http://localhost:9200/\_plugin/bigdesk/
* http://localhost:9200/\_plugin/paramedic/



## Bonnes pratiques


### Se méfier des erreurs de mapping

Les erreurs de
[mapping](http://www.elasticsearch.org/guide/reference/mapping/index.html) sont
{'fraction_non_alphanumeric': 0.08507728080973875, 'fraction_numerical': 0.012310217480508822, 'mean_word_length': 4.882542236524538, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 14, 'lorem ipsum': 0, 'www.': 10, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3129668', 'n_tokens_mistral': 2342, 'n_tokens_neox': 2291, 'n_words': 815}