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

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

Quick and durty :

for seq in $(seq 1 150)
do

for i in $(curl -s -XGET 'localhost:9200/logstash-2017.02.03/_search?pretty&size=10000' -d '
{
  "query": { "match": { "message": "flipperledophin" } }
}' | grep _id | awk -F'"' '{print $4}'); do curl -XDELETE http://localhost:9200/logstash-2017.02.03/syslog-flipper/${i}; done

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

service elasticsearch restart

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

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

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

A venir ...