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.
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
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": {}
}
}'
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": {}
}
}
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.)
Das Löschen von Elasticsearch 2.x ist nicht mehr zulässig, da Dokumente im Index verbleiben und Indexschäden verursachen.
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
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.
(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.
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": {} }}'
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
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.
In Kibana Konsole:
POST calls-xin-test-2/_delete_by_query
{
"query": {
"match_all": {}
}
}
Elasticsearch 2.3 die Option
action.destructive_requires_name: true
in elasticsearch.yml mach die Reise
curl -XDELETE http://localhost:9200/Twitter/Tweet
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"
}
}
}
}