Daten aus ElasticSearch entfernen


362

Ich bin neu bei ElasticSearch . Ich versuche herauszufinden, wie Daten aus ElasticSearch entfernt werden. Ich habe meine Indizes gelöscht. Dies scheint jedoch die Daten selbst nicht zu entfernen. Die anderen Dinge, die ich gesehen habe, verweisen auf die Funktion " Nach Abfrage löschen". Ich bin mir jedoch nicht einmal sicher, worauf ich abfragen soll. Ich kenne meine Indizes. Im Wesentlichen möchte ich herausfinden, wie man a macht

DELETE FROM [Index]

Von PostMan in Chrome. Ich habe jedoch kein Glück. Es scheint, egal was ich mache, die Daten hängen herum. Bisher habe ich die Indizes erfolgreich gelöscht, indem ich das HTTP-Verb DELETE in PostMan und eine URL wie die folgende verwendet habe:

   http://localhost:9200/[indexName]

Dies scheint jedoch die Daten (auch als Dokumente bezeichnet) nicht selbst zu entfernen.


Ich überprüfe dies mit dem Postboten und wurde als "{" bestätigt ": wahr}" zurückgesetzt. Wenn Sie diese bestätigte Antwort sehen, machen Sie sich keine Sorgen. Der Index wird vom Gummiband entfernt.
Bijayk

Antworten:


428

Sie können cURLmit einem der vielen Tools, die Open Source-Enthusiasten für Elasticsearch erstellt haben, mit oder visuell löschen .

CURL verwenden

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

z.B

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

Sie erhalten dann eine Antwort, ob dies erfolgreich war oder nicht. Sie können einen ganzen Index oder Typen mit einem Index löschen. Sie können auch einen Typ löschen, indem Sie die Dokument-ID wie folgt weglassen.

curl -XDELETE localhost:9200/shop/product

Wenn Sie einen Index löschen möchten -

curl -XDELETE localhost:9200/shop

Wenn Sie mehr als einen Index löschen möchten, der einer bestimmten Namenskonvention folgt (beachten Sie den *Platzhalter), -

curl -XDELETE localhost:9200/.mar* 

Visuell

Es gibt verschiedene Tools , wie oben erwähnt, habe ich sie hier aufzählen werde nicht , aber ich werde Sie zu einem Link, den Sie sofort loslegen ermöglicht, befindet sich hier . Dieses Tool heißt KOPF. Um eine Verbindung zu Ihrem Host herzustellen, klicken Sie auf das Logo in der oberen linken Ecke und geben Sie die URL Ihres Clusters ein.

Sobald die Verbindung hergestellt ist, können Sie Ihren gesamten Cluster verwalten, Ihren Cluster löschen, optimieren und optimieren.


Gibt es eine Möglichkeit, 3 Dokumente zu löschen, deren ID ich kenne?
HIRA THAKUR

@ JayeshJain nach meinem derzeitigen Kenntnisstand, nein. Sie können 3 modifizierte curl -XDELETE-Befehle in ein Bash-Skript einfügen und 3 nacheinander ausführen oder ausführen.
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

Ich habe es genauso gemacht. Aber ich habe nur darüber nachgedacht, ob es eine intelligentere Möglichkeit gibt, mehrere Dokumente zu löschen. Ich könnte einen Begriff verwenden, wenn ich das Gebiet kenne. Aber in diesem Szenario muss ich nur Dokumente anhand ihrer ID löschen. Danke trotzdem
HIRA THAKUR

2
Wie kann ich einen Index mit einem ungültigen Zeichen löschen, z. B. logstash-eu -% {customer} -2016.11.22. Ich möchte ALLE Indizes logstash-eu -% {customer} - * oder logstash-eu -% *
Chris F

459

Wenn Sie jemals alle Indizes löschen müssen, kann dies nützlich sein:

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

Power Shell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all

20
Dies ist sehr nützlich für die Entwicklung und muss auf die (leere) Datenbank zurückgesetzt werden. Vielen Dank!!
Artistan

3
Erstellen Sie in Ihrem bash_profile einen Alias ​​für diesen Befehl, der sich für die Entwicklung als nützlich erweist.
user805981

2
'Platzhalterausdrücke oder alle Indizes sind nicht erlaubt'
ZurabWeb

1
Beachten Sie, dass dadurch alle Daten gelöscht werden, einschließlich Ihrer X-Pack-Zugangsdaten.
Gajus

2
Dies löscht auch Kibana Dashboards und Visualisierungen
Nano

54

In der Dokumentation (oder im Definitiven Handbuch ) heißt es, dass Sie auch die nächste Abfrage verwenden können, um alle Indizes zu löschen :

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

Und es gibt einen wichtigen Hinweis:

Für einige ist die Möglichkeit, alle Ihre Daten mit einem einzigen Befehl zu löschen, eine sehr beängstigende Aussicht. Wenn Sie die Möglichkeit eines versehentlichen Massenlöschens ausschließen möchten, können Sie truein Ihrem Verzeichnis Folgendes einstellen elasticsearch.yml:

action.destructive_requires_name: true


30

Sie müssen eine DELETEAnfrage an senden

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

Sie können auch ein einzelnes Dokument löschen:

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

Ich schlage vor, Elastichammer zu verwenden .

Nach dem Löschen können Sie nachsehen, ob der Index noch unter der folgenden URL vorhanden ist: http://[your_host]:9200/_stats/

Viel Glück!


Wie können Indizes gelöscht werden, die älter als 10 Tage sind? Ich kann den Kurator nicht verwenden, da mein Server nicht unterstützt wird.
Biolinh

17

Durch Löschen des Index wird die Zuordnung gelöscht und eingegeben. Sie können alle Zeilen mit der folgenden Abfrage löschen

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

Für die obige Abfrage müssen Sie jedoch das Plugin "Löschen nach Abfrage" installieren, da Elasticsearch 2.0.0-beta1 "Löschen nach Abfrage" aus der Haupt-API entfernt wurde

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Für mehr

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


Sowohl vor als auch nach der Installation des Plugins und dem Neustart von ES wird "Kein Handler für Uri und Methode gefunden" angezeigt.
Matthew Read

Dies funktioniert in Elasticsearch 6+ nicht. Verwenden Sie stattdessen _delete_by_query.
Shailesh Pratapwar

17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

Geben Sie hier die Bildbeschreibung ein

#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'

Installieren Sie Kibana . Kibana verfügt über ein intelligenteres Entwicklertool, mit dem sich Abfragen einfach erstellen lassen.

Geben Sie hier die Bildbeschreibung ein


1
Wie können Indizes gelöscht werden, die älter als 10 Tage sind? Ich kann den Kurator nicht verwenden, da mein Server nicht unterstützt wird.
Biolinh

9
curl -X DELETE 'https://localhost:9200/_all'

Wechseln Sie httpzu, httpswenn Sie in Ihrer Anwendung ein SSL-Zertifikat verwenden


8

Sie können einen Index in Python wie folgt löschen

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')


7

Für das Massenlöschen nach Abfrage können Sie eine spezielle API zum Löschen nach Abfrage verwenden :

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

In der Geschichte wurde diese API gelöscht und dann wieder eingeführt

Wer es interessant hat hat eine lange Geschichte.

  1. In der ersten Version dieser Antwort verweise ich auf die Dokumentation von elasticsearch Version 1.6 . Darin wurde diese Funktionalität als veraltet markiert, funktioniert aber gut.
  2. In elasticsearch Version 2.0 wurde es in ein separates Plugin verschoben . Und sogar Gründe, warum es Plugin erklärt wurde .
  3. Und es erschien wieder in der Kern-API in Version 5.0 !

3
Seien Sie vorsichtig beim Löschen per Abfrage. Es ist aus einem wichtigen Grund veraltet. Außerhalb des Speicherfehler!
user3658423

Sicher. Aber Sie können ausspionieren, wenn es für Sie passiert ist oder Sie genug Gedächtnis haben.
Hubbitus


5

Ich wollte den Logstash-Index löschen und suchte viel nach verschiedenen Tools wie Curl. Habe aber am Ende die Lösung gefunden. Melden Sie sich bei Kibana an. Gehen Sie zur Registerkarte Dev Tools, geben Sie das DELETE /logstash-*Abfragefeld ein und klicken Sie auf die grüne Pfeiltaste. Wenn Sie "bestätigt" werden: true als Antwort bedeutet dies, dass die Daten gelöscht wurden.


VIELEN DANK!!! Ich habe viele andere Optionen ausprobiert - dies ist die einzige, die für mich funktioniert hat.
Eladyanai

5

Auflisten der Indizes curl -L localhost:9200/_cat/indices

9200 Standardport [Ändern Sie den Port, wenn Sie einen anderen Port verwenden]

Sie werden wahrscheinlich alle Indizes finden, die mit dem logstash-yyyy-mm-ddFormat beginnen (logstash- *).

Sie können alle Indizes sehen und verwenden

Zum Löschen der Indizes und Daten wird der folgende Befehl ausgelöst.

curl -XDELETE localhost:9200/index_name (Dadurch werden sowohl die Daten als auch die Indizes entfernt.)


4

Hier gibt es viele gute Antworten, aber ich möchte noch etwas hinzufügen:

  • Wenn Sie mit dem AWS ElasticSearch-Dienst arbeiten , können Sie keine Indizes löschen / löschen . Anstatt Indizes zu löschen, müssen Sie sie neu indizieren .

Ich habe gerade einen Index für AWS ElasticSearch gelöscht. Auf meiner Domain wird ES 5.1 ausgeführt.
Gazarsgo

2
Unter AWS ES können Sie keine Indizes öffnen / schließen - dies erfordert eine Neuindizierung. Sie können jedoch Indizes löschen. Ich habe es nur über die Kibana-Konsole gemacht, aber es funktioniert definitiv.
Tom Dufall

4

Sie können entweder den gesamten Index, den Dokumenttyp oder bestimmte ID-Daten löschen. Dies sind die drei Möglichkeiten:

  1. curl -XDELETE localhost: 9200 / index_name

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

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

und wenn Sie den gesamten Index löschen möchten, wählen Sie einen Platzhalter.


Hallo, ich hoffe, bevor Sie Abfragen ausführen, haben Sie Ihre elastische Suche gestartet und stellen sicher, dass sie standardmäßig an alle lokalen Adressen gebunden ist. Anstelle von localhost können Sie auch Ihre IP-Adresse verwenden. wie 10.80.15.45:9200 Und wenn Sie einmal Ihre ES-Einstellung überprüft haben, kann ich mir vorstellen, network.bind_host einzuchecken und sicherzustellen, dass es entweder nicht oder auf 0.0.0.0 oder :: 0 oder auf die richtige IP-Adresse für Ihr Netzwerk eingestellt ist.
Gaurav

3

Sie können den Index auch mit der Aktion DELETE in 'elasticsearch head' ( Chrome-Plugin ) löschen . Fügen Sie es Ihrem Chrome hinzu und verbinden Sie es mit Ihrem Host. Dort finden Sie alle Ihre Indizes. Wenn Sie unter dem Index, den Sie löschen möchten, auf die Schaltfläche Aktionen klicken, finden Sie in der Dropdown-Liste die Option LÖSCHEN. Klicken Sie darauf und geben Sie DELETE in das Popup ein. Ihr Index wird gelöscht. Mit der Erweiterung "Elasticsearch head" können Sie Ihre Indizes und Daten auf einfache Weise anzeigen und verwalten.


2

Sie können den Chrome-Erweiterungselasticsearch-Kopf verwenden, um den Index zu löschen


2

Sie können den Index mit der Kibana-Konsole löschen:

Konsolensymbol

So erhalten Sie alle Indizes:

GET /_cat/indices?v

So löschen Sie einen bestimmten Index:

DELETE /INDEX_NAME_TO_DELETE

1

Sie können einen oder mehrere Indizes löschen, wodurch deren Dateien wirklich von der Festplatte gelöscht werden . Zum Beispiel:

curl -XDELETE localhost:9200/$INDEXNAME

Wo $INDEXNAMEkann ein Indexname sein (zB users_v2), N Indizes durch Komma getrennt (zB users_v2,users_v3). Ein Indexmuster (zB users_*) oder _allfunktioniert auch, es sei denn, es ist in der Konfiguration über blockiert action.destructive_requires_name: true.

Das Löschen einzelner Dokumente ist möglich, wird jedoch nicht sofort gelöscht . Ein Löschen ist nur ein weiches Löschen, und Dokumente werden beim Zusammenführen von Segmenten wirklich entfernt . In dieser Präsentation finden Sie viele Details zu Segmenten und Zusammenführungen . Es geht um Solr, aber Zusammenführungen stammen von Lucene, sodass Sie in Elasticsearch die gleichen Optionen haben.

Zurück zur API können Sie entweder einzelne Dokumente nach ID löschen (einen Routing-Wert angeben, wenn Sie mit Routing indizieren):

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

Oder auf Anfrage:

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

0

Angenommen, ich muss einen Index löschen filebeat-7.6.2-2020.04.30-000001und habe ihn mit der Option curl DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") ausgeführt. Dies führt zu einem Authentifizierungsproblem wie folgt .

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

Hier sollten Sie die Curl-Anfrage mit dem Benutzernamen und dem Passwort authentifizieren, die Sie für Elasticsearch angegeben haben. Versuchen Sie es dann

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

führt zu {"bestätigt": wahr} .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.