Contexte :

Il est parfois necessaire de supprimer des documents d'un index, cela devient ennuyant quand il y en a de un volume important.

Différentes façon de supprimer ces documents :

Suppression par type :

Comme les logs d'accès d'Apache

1 curl  -XDELETE 'http://localhost:9200/logstash-2014.08.22/apacheaccesslogs'

Quick and durty :

1 for seq in $(seq 1 150)
2 do
3 
4 for i in $(curl -s -XGET 'localhost:9200/logstash-2017.02.03/search?pretty&size=10000' -d '
5 {
6   "query": { "match": { "message": "flipperledophin" } }
7 }' | grep id | awk -F'"' '{print $4}'); do curl -XDELETE http://localhost:9200/logstash-2017.02.03/syslog-flipper/${i}; done
8 
9 done

C'est une manière assez rapide mais sale, et très longue quand il y a beaucoup de données. Il faut aussi connaître plus ou moins le nombre de documents à supprimer pour paramétrer la boucle.
On est obliger de faire une première boucle car ES ne renvoie qu'au max 10000 résultats.

Plugins delete

Il faut installer le plugin "delete-by-query", voir la documentation pour l'installer en fonction de la version d'ES.

Redémarrer ES

1 service elasticsearch restart

Vérifier que tous les shards sont bien assignés :

1 curl http://127.0.0.1:9200/_cat/allocation

Suppression en masse (plus rapide que la méthode quick and dirty)

1 A venir ...