webentwicklung-frage-antwort-db.com.de

Löschen Sie alle Dokumente aus dem Index/Typ, ohne den Typ zu löschen

Ich weiß, dass man alle Dokumente eines bestimmten Typs über deleteByQuery löschen kann.

Beispiel:

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

Aber ich habe KEINEN Begriff und möchte einfach alle Dokumente dieses Typs löschen, egal welchen Begriff. Was ist die beste Vorgehensweise, um dies zu erreichen? Ein leerer Begriff funktioniert nicht.

Link zu deleteByQuery

118
Michael Leiss

Ich glaube, wenn Sie das Löschen nach Abfrage mit einem Treffer kombinieren, sollte es genau das tun, wonach Sie suchen, etwa so (anhand Ihres Beispiels):

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

Oder Sie könnten den Typ einfach löschen:

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

Das Delete-By-Query-Plugin wurde zugunsten einer neuen Implementierung der Delete-By-Query-API im Core entfernt. Lies hier

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

In ElasticSearch 5.x ist die delete_by_query-API standardmäßig vorhanden

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

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

Die Antwort von Torsten Engelbrecht in der Antwort von John Petrones wurde erweitert:

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

(Ich wollte Johns Antwort nicht bearbeiten, da sie Stimmen erhielt und als Antwort festgelegt wurde, und ich habe möglicherweise einen Fehler eingeführt.)

16
Brimstedt

Das Löschen von Elasticsearch 2.x ist nicht mehr zulässig, da Dokumente im Index verbleiben und Indexschäden verursachen.

13
Fabio Fumarola

Sie können Dokumente vom Typ mit folgender Abfrage löschen:

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

Ich habe diese Abfrage in Kibana und Elastic 5.5.2 getestet

10
Luka Lopusina

Hinweis für ES2 +

Mit ES 1.5.3 ist die Delete-by-Query-API veraltet und wird seit ES 2.0 vollständig entfernt

Anstelle der API ist die Delete By Query jetzt ein Plugin .

Um das Plugin "Nach Abfrage löschen" verwenden zu können, müssen Sie das Plugin auf allen Knoten des Clusters installieren:

Sudo bin/plugin install delete-by-query

Alle Knoten müssen nach der Installation neu gestartet werden.


Die Verwendung des Plugins entspricht der alten API. Sie müssen nichts an Ihren Abfragen ändern - dieses Plugin macht sie einfach zum Laufen.


* Um vollständige Informationen darüber zu erhalten, warum die API entfernt wurde, können Sie mehr hier lesen.

5
Dekel

(Der Ruf ist nicht hoch genug, um einen Kommentar abzugeben.) Der zweite Teil der Antwort von John Petrone funktioniert - keine Abfrage erforderlich. Es löscht den Typ und alle darin enthaltenen Dokumente. Dies kann jedoch immer dann neu erstellt werden, wenn Sie ein neues Dokument mit diesem Typ indizieren.

Nur zur Klarstellung: $ curl -XDELETE 'http://localhost:9200/Twitter/Tweet'

Hinweis: Das macht das Mapping löschen! Wie bereits erwähnt, kann es durch Erstellen eines neuen Dokuments leicht neu zugeordnet werden.

4
Emmy D

Die obigen Antworten funktionieren nicht mehr mit ES 6.2.2, da Strict die Überprüfung des Inhaltstyps für Elasticsearch REST -Anfragen ist. Der curl Befehl, den ich am Ende verwendet habe, ist folgender:

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

Sie haben diese Alternativen:

1) Einen ganzen Index löschen:

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

beispiel:

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

Weitere Informationen finden Sie hier - https://www.elastic.co/guide/de/elasticsearch/reference/current/indices-delete-index.html

2) Löschen mit Query an diejenigen, die übereinstimmen:

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

* Hier ist mentorz ein Indexname und Benutzer ein Typ

2
NeeruSingh

Nur um ein paar Cent zu diesem hinzuzufügen. 

Das oben erwähnte "delete_by_query" ist noch als Plugin in elasticsearch 2.x verfügbar. 

In der neuesten Version 5.x wird es durch "delete by query api" ersetzt.

2
Walaitki

In Kibana Konsole:

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

Elasticsearch 2.3 die Option

    action.destructive_requires_name: true

in elasticsearch.yml mach die Reise

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

Wenn Sie ein Dokument nach einem Datum löschen möchten, können Sie die Kibana-Konsole (v.6.1.2) verwenden.

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