Supprimer des données d'ElasticSearch

363

Je suis nouveau sur ElasticSearch . J'essaie de comprendre comment supprimer des données d'ElasticSearch. J'ai supprimé mes index. Cependant, cela ne semble pas réellement supprimer les données elles-mêmes. Les autres éléments que j'ai vus pointent vers la fonction Supprimer par requête . Cependant, je ne sais même pas sur quoi interroger. Je connais mes index. Essentiellement, je voudrais comprendre comment faire un

DELETE FROM [Index]

Depuis PostMan dans Chrome. Cependant, je n'ai pas de chance. Il semble que peu importe ce que je fais, les données traînent. Jusqu'à présent, j'ai réussi à supprimer les index en utilisant le verbe DELETE HTTP dans PostMan et en utilisant une URL comme:

   http://localhost:9200/[indexName]

Cependant, cela ne semble pas supprimer les données (aka docs) elles-mêmes.

user687554
la source
Je vérifie cela avec le facteur et ai obtenu le reposne comme "{" reconnu ": vrai}" Si vous voyez cette réponse confirmée ne vous inquiétez pas. L'index est retiré de l'élastique.
bijayk

Réponses:

428

Vous pouvez supprimer en utilisant cURLou visuellement en utilisant l'un des nombreux outils que les passionnés open source ont créés pour Elasticsearch.

Utilisation de cURL

curl -XDELETE localhost:9200/index/type/documentID

par exemple

curl -XDELETE localhost:9200/shop/product/1

Vous recevrez alors une réponse indiquant si cela a réussi ou non. Vous pouvez également supprimer un index entier ou des types avec un index, vous pouvez supprimer un type en omettant l'ID du document comme ceci -

curl -XDELETE localhost:9200/shop/product

Si vous souhaitez supprimer un index -

curl -XDELETE localhost:9200/shop

Si vous souhaitez supprimer plusieurs index qui suivent une certaine convention de dénomination (notez le *, un caractère générique), -

curl -XDELETE localhost:9200/.mar* 

Visuellement

Il existe différents outils comme mentionné ci-dessus, je ne les énumérerai pas ici, mais je vous lierai à un qui vous permet de commencer immédiatement, situé ici . Cet outil s'appelle KOPF, pour vous connecter à votre hébergeur veuillez cliquer sur le logo en haut à gauche et saisir l'URL de votre cluster.

Une fois connecté, vous pourrez administrer l'intégralité de votre cluster, supprimer, optimiser et régler votre cluster.

Opster Elasticsearch - Nathan
la source
est-il possible de supprimer 3 doc dont je connais l'id.
HIRA THAKUR
@JayeshJain à ma connaissance actuelle, non. Vous pouvez mettre 3 commandes curl -XDELETE modifiées dans un script bash et exécuter ou exécuter 3 l'une après l'autre.
Opster Elasticsearch - Nathan
@JayeshJain so curl -XDELETE localhost: 9200 / index / type / docid1 // curl -XDELETE localhost: 9200 / index / type / docid2 // curl -XDELETE localhost: 9200 / index / type / docid3
Opster Elasticsearch - Nathan
je l'ai fait de la même manière.Mais je pensais simplement s'il existe un moyen plus intelligent de supprimer plusieurs documents. Je pourrais utiliser le terme si je connaissais le domaine. Mais dans ce scénario, j'ai juste besoin de supprimer les documents par leur identifiant. Thx
quand même
2
Comment puis-je supprimer un index avec un caractère non valide, par exemple, logstash-eu -% {customer} -2016.11.22. Je veux supprimer TOUS les indices logstash-eu -% {customer} - * ou logstash-eu -% *
Chris F
459

Si vous avez besoin de supprimer tous les index, cela peut être utile:

curl -X DELETE 'http://localhost:9200/_all'

Powershell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all
kha
la source
20
ceci est très utile pour le développement et nécessite de réinitialiser la base de données (vide). Merci!!
Artistan
3
dans votre bash_profile créez un alias pour cette commande et cela vous sera utile pour le développement.
user805981
2
'Les expressions génériques ou tous les index ne sont pas autorisés'
ZurabWeb
1
Notez que cela supprimera toutes les données, y compris vos identifiants d'accès au x-pack.
Gajus
2
Cela supprime également les tableaux de bord et les visualisations de Kibana
nano
54

La documentation (ou le guide définitif ) indique que vous pouvez également utiliser la requête suivante pour supprimer tous les index:

curl -XDELETE 'http://localhost:9200/*'

Et il y a une note importante:

Pour certains, la possibilité de supprimer toutes vos données avec une seule commande est une perspective très effrayante. Si vous souhaitez éliminer la possibilité d'une suppression de masse accidentelle, vous pouvez définir ce qui suit truedans votre elasticsearch.yml:

action.destructive_requires_name: true

skovorodkin
la source
30

Vous devez envoyer une DELETEdemande à

http://[your_host]:9200/[your_index_name_here]

Vous pouvez également supprimer un seul document:

http://[your_host]:9200/[your_index_name_here]/[your_type_here]/[your_doc_id]

Je vous suggère d'utiliser un marteau élastique .

Après la suppression, vous pouvez rechercher si l'index existe toujours avec l'URL suivante: http://[your_host]:9200/_stats/

Bonne chance!

Jesper
la source
comment supprimer les indices de plus de 10 jours? Je ne peux pas utiliser curator car mon serveur n'est pas supporté.
biolinh
17

La suppression de l'index supprimera le mappage et le type. vous pouvez supprimer toutes les lignes par la requête suivante

curl -XDELETE 'localhost:9200/twitter/tweet/_query?pretty' -d'
{
   "query": { 
      "match_all": 
   }
}'

Cependant, pour la requête ci-dessus, vous devez installer le plug-in de suppression par requête car la suppression par requête d'Elasticsearch 2.0.0-beta1 a été supprimée de l'API principale.

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Pour plus

http://blog.appliedinformaticsinc.com/how-to-delete-elasticsearch-data-records-by-dsl-query/

shahid ashraf
la source
Avant et après l'installation du plugin et le redémarrage d'ES, je reçois "Aucun gestionnaire trouvé pour l'URI et la méthode".
Matthew Read
Cela ne fonctionne pas dans Elasticsearch 6+. Utilisez plutôt _delete_by_query.
Shailesh Pratapwar
17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

entrez la description de l'image ici

#delete index:         curl -XDELETE 'localhost:9200/index_name'
#delete all indices:   curl -XDELETE 'localhost:9200/_all'
#delete document   :   curl -XDELETE 'localhost:9200/index_name/type_name/document_id'

Installez kibana . Kibana dispose d'un outil de développement plus intelligent qui permet de créer facilement des requêtes.

entrez la description de l'image ici

ysk
la source
1
comment supprimer les indices de plus de 10 jours? Je ne peux pas utiliser curator car mon serveur n'est pas supporté.
biolinh
9
curl -X DELETE 'https://localhost:9200/_all'

Passez httpà httpssi vous utilisez un certificat SSL dans votre application

Vikash Chauhan
la source
8

Vous pouvez supprimer un index en python comme suit

from elasticsearch import Elasticsearch

es = Elasticsearch([{'host':'localhost', 'port':'9200'}])

es.index(index='grades',doc_type='ist_samester',id=1,body={
    "Name":"Programming Fundamentals",
    "Grade":"A"
})

es.indices.delete(index='grades')
Farid ullah
la source
7

Pour la suppression en masse par requête, vous pouvez utiliser l' API spéciale de suppression par requête :

$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

Dans l'histoire, cette API a été supprimée puis réintroduite

Qui l'intéresse a une longue histoire.

  1. Dans la première version de cette réponse, je me réfère à la documentation d'elasticsearch version 1.6 . Cette fonctionnalité a été marquée comme obsolète mais fonctionne bien.
  2. Dans elasticsearch version 2.0, il a été déplacé vers un plugin séparé . Et même les raisons pour lesquelles il est devenu plugin expliquées .
  3. Et il est à nouveau apparu dans l'API de base dans la version 5.0 !
Hubbitus
la source
3
Soyez prudent en utilisant la suppression par requête. Son obsolète pour une raison majeure. OutOfMemoryError!
user3658423
Sûr. Mais vous pouvez espionner si cela vous est arrivé ou si vous avez assez de mémoire.
Hubbitus
1
Cela n'est plus obsolète: elastic.co/guide/en/elasticsearch/reference/6.4/…
Hubbitus
5

Je voulais supprimer l'index logstash et j'ai beaucoup cherché sur différents outils comme curl. Mais j'ai trouvé la solution à la fin. Connectez-vous à Kibana. Allez dans l'onglet Dev Tools et saisissez DELETE /logstash-*le champ de requête et appuyez sur le bouton fléché vert. si vous êtes "reconnu": vrai en réponse, cela signifie que les données ont été effacées.

Ashish Kumar
la source
MERCI!!! j'ai essayé de nombreuses autres options, c'est la seule qui a fonctionné pour moi.
eladyanai
5

Pour répertorier les indices curl -L localhost:9200/_cat/indices

9200 port par défaut [changez le port si vous utilisez un autre port]

Vous trouverez probablement tous les index commençant par le logstash-yyyy-mm-ddformat (logstash- *)

Vous pouvez voir tous les indices et utiliser

Pour supprimer les index et les données, déclenchez la commande suivante.

curl -XDELETE localhost:9200/index_name (Ce qui supprimera les données et les indices à la fois).

rajdeepbs29
la source
4

Il y a beaucoup de bonnes réponses ici, mais il y a aussi quelque chose que j'aimerais ajouter:

  • Si vous utilisez le service AWS ElasticSearch , vous ne pouvez pas supprimer / supprimer les index . Au lieu de supprimer les index, vous devez les réindexer .
Facundo La Rocca
la source
Je viens de supprimer un index sur AWS ElasticSearch, mon domaine exécute ES 5.1.
gazarsgo
2
Sur AWS ES, vous ne pouvez pas ouvrir / fermer les index - cela nécessite une réindexation. Vous pouvez cependant supprimer des index. Je ne l'ai fait que via la console Kibana, mais cela fonctionne définitivement.
Tom Dufall
4

Vous pouvez supprimer un index entier, un type de document ou une donnée d'identification perticulaire. ce sont les trois façons:

  1. curl -XDELETE localhost: 9200 / nom_index

  2. curl -XDELETE localhost: 9200 / nom_index / type-doc

  3. curl -XDELETE localhost: 9200 / index_name / doc-type / documentId

et si vous souhaitez supprimer tout l'index, optez pour le caractère générique.

Gaurav
la source
Salut, j'espère qu'avant d'exécuter les requêtes, vous avez commencé votre recherche élastique et assurez-vous que par défaut, il se lie à toutes les adresses locales. et au lieu de localhost, vous pouvez également utiliser votre adresse IP. comme 10.80.15.45:9200 Et une fois vérifier votre paramètre ES, je peux penser à vérifier network.bind_host et assurez-vous qu'il n'est pas défini ou est défini sur 0.0.0.0 ou :: 0 ou sur l'adresse IP correcte pour votre réseau.
Gaurav
3

Vous pouvez également supprimer l'index à l'aide de l'action DELETE dans 'elasticsearch head' ( plug-in Chrome ). Ajoutez-le à votre chrome et connectez-le à votre hôte. Vous y trouverez tous vos index et si vous cliquez sur le bouton d'actions sous l'index que vous souhaitez supprimer, vous trouverez une option DELETE dans le menu déroulant. cliquez dessus et entrez SUPPRIMER dans la fenêtre contextuelle. Votre index sera supprimé. L'extension «Elasticsearch head» est un moyen simple de visualiser et de gérer vos indices et vos données.

prateek kumar
la source
2

Vous pouvez utiliser l'extension chrome elasticsearch-head pour supprimer l'index

ssh
la source
2

Vous pouvez supprimer l'index par Kibana Console:

Icône de la console

Pour obtenir tous les index:

GET /_cat/indices?v

Pour supprimer un index spécifique:

DELETE /INDEX_NAME_TO_DELETE
FChiri
la source
1

Vous pouvez supprimer un ou plusieurs index, ce qui supprime vraiment leurs fichiers du disque . Par exemple:

curl -XDELETE localhost:9200/$INDEXNAME

$INDEXNAMEpeut être un nom d'index (par exemple users_v2), N indices séparés par une virgule (par exemple users_v2,users_v3). Un modèle d'index (par exemple users_*) ou _all, fonctionne également, sauf s'il est bloqué dans la configuration via action.destructive_requires_name: true.

Il est possible de supprimer des documents individuels, mais cela ne les purgera pas immédiatement . Une suppression n'est qu'une suppression temporaire et les documents sont réellement supprimés lors des fusions de segments . Vous trouverez de nombreux détails sur les segments et les fusions dans cette présentation . Il s'agit de Solr, mais les fusions proviennent de Lucene, vous avez donc les mêmes options dans Elasticsearch.

De retour à l'API, vous pouvez soit supprimer des documents individuels par ID (fournir une valeur de routage si vous indexez avec le routage):

curl -XDELETE localhost:9200/users_v2/_doc/user1

Ou par requête:

curl -XPOST -H 'Content-Type: application/json' localhost:9200/users_v2/_delete_by_query -d '{
  "query": {
    "match": {
      "description_field": "bad user"
    }
  }
}'
Radu Gheorghe
la source
0

Supposons que je doive supprimer un index filebeat-7.6.2-2020.04.30-000001et que je l'ai effectué à l'aide d'une option curl DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") et entraîne un problème d' authentification comme ci-dessous;

{
  "error" : {
    "type" : "security_exception",
    "reason" : "missing authentication credentials for REST request [/filebeat-7.6.2-2020.04.30-000001?pretty]"
  },
  "status" : 401
}

Ici, vous devez authentifier la demande de boucle à l'aide du nom d'utilisateur et du mot de passe que vous avez fournis pour Elasticsearch. Essayez alors

curl -X DELETE -u myelasticuser:myelasticpassword "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"

will aura pour résultat "" reconnu ": vrai} .

kisHoR
la source