web-dev-qa-db-fra.com

Supprimer tous les documents de l'index/type sans supprimer le type

Je sais que l'on peut supprimer tous les documents d'un certain type via deleteByQuery.

Exemple:

curl -XDELETE 'http://localhost:9200/Twitter/Tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}'

Mais je n'ai AUCUN terme et je veux simplement supprimer tous les documents de ce type, peu importe le terme. Quelle est la meilleure pratique pour y parvenir? Le terme vide ne fonctionne pas.

Lien vers deleteByQuery

118
Michael Leiss

Je crois que si vous combinez la suppression par requête avec une correspondance, tout devrait correspondre à ce que vous recherchez, par exemple (à l'aide de votre exemple):

curl -XDELETE 'http://localhost:9200/Twitter/Tweet/_query' -d '{
    "query" : { 
        "match_all" : {}
    }
}'

Ou vous pouvez simplement supprimer le type:

curl -XDELETE http://localhost:9200/Twitter/Tweet
142
John Petrone

Le plug-in Delete-By-Query a été supprimé au profit d'une nouvelle implémentation de l'API Delete By Query dans le noyau Lire ici

curl -XPOST 'localhost:9200/Twitter/Tweet/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'
49
Iqbal

Depuis ElasticSearch 5.x, l’API delete_by_query est présente par défaut

POST: http://localhost:9200/index/type/_delete_by_query

{
    "query": { 
        "match_all": {}
    }
}
44
Jay Shah

Le commentaire de Torsten Engelbrecht dans John Petrones répond:

curl -XDELETE 'http://localhost:9200/Twitter/Tweet/_query' -d 
  '{
      "query": 
      {
          "match_all": {}
      }
   }'

(Je ne voulais pas modifier la réponse de John, car elle a reçu des votes positifs et est définie comme réponse, et j'ai peut-être introduit une erreur.)

16
Brimstedt

À partir d'Elasticsearch 2.x, la suppression n'est plus autorisée, car les documents restent dans l'index, ce qui provoque la corruption de l'index.

13
Fabio Fumarola

Vous pouvez supprimer des documents de type avec la requête suivante:

POST /index/type/_delete_by_query
{
    "query" : { 
        "match_all" : {}
    }
}

J'ai testé cette requête dans Kibana et Elastic 5.5.2

10
Luka Lopusina

Note pour ES2 +

Depuis ES 1.5.3, l’API avec suppression par requête est obsolète et complètement supprimé depuis ES 2.0.

Au lieu de l'API, le Delete By Query est maintenant un plugin .

Pour utiliser le plug-in Delete By Query, vous devez l'installer sur tous les nœuds du cluster:

Sudo bin/plugin install delete-by-query

Tous les noeuds doivent être redémarrés après l'installation.


L'utilisation du plugin est la même que l'ancienne API. Vous n'avez pas besoin de changer quoi que ce soit dans vos requêtes - ce plugin les fera simplement fonctionner.


* Pour des informations complètes sur la suppression de l'API, vous pouvez en lire plus ici .

5
Dekel

(Réputation pas assez élevée pour commenter) La deuxième partie de la réponse de John Petrone fonctionne - aucune requête n'est requise. Il supprimera le type et tous les documents contenus dans ce type, mais cela peut simplement être recréé chaque fois que vous indexez un nouveau document sur ce type.

Juste pour clarifier: $ curl -XDELETE 'http://localhost:9200/Twitter/Tweet'

Remarque: ceci fait supprime le mappage! Mais comme mentionné précédemment, il peut être facilement reconfiguré en créant un nouveau document.

4
Emmy D

Les réponses ci-dessus ne fonctionnent plus avec ES 6.2.2 en raison de Vérification stricte du type de contenu pour les demandes Elasticsearch REST . La commande curl que j'ai finalement utilisée est la suivante:

curl -H'Content-Type: application/json' -XPOST 'localhost:9200/yourindex/_doc/_delete_by_query?conflicts=proceed' -d' { "query": { "match_all": {} }}'
3
mindas

Vous avez ces alternatives:

1) Supprimer tout un index:

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

exemple:

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

Pour plus de détails, vous trouverez ici - https://www.elastic.co/guide/fr/elasticsearch/reference/current/indices-delete-index.html

2) Supprimer par Query pour ceux qui correspondent:

curl -XDELETE 'http://localhost:9200/mentorz/users/_query' -d                
    '{
        "query":
            {
                "match_all": {}
            }
    }'

* Ici mentorz est un nom d'index et utilisateurs est un type

2
NeeruSingh

Juste pour ajouter quelques centimes à cela. 

Le "delete_by_query" mentionné en haut est toujours disponible en tant que plugin dans elasticsearch 2.x. 

Bien que dans la dernière version 5.x, il sera remplacé par "delete by query api"

2
Walaitki

Dans Kibana Console:

POST calls-xin-test-2/_delete_by_query
{
  "query": { 
    "match_all": {}
  }
}
2
Xin Wang

Elasticsearch 2.3 l'option

    action.destructive_requires_name: true

dans elasticsearch.yml faire le voyage

    curl -XDELETE http://localhost:9200/Twitter/Tweet
0
JJANSSEN

Si vous souhaitez supprimer un document en fonction d'une date ..___, vous pouvez utiliser kibana console (v.6.1.2).

POST index_name/_delete_by_query
{
      "query" : {
              "range" : {
                 "sendDate" : {
                     "lte" : "2018-03-06"
                              }
                        }
                  }
}
0
SerefAltindal