2013-07-16 24 views
12

Ich versuche, bestimmte Datensätze von Elasticsearch zu löschen. Meine Abfrage ist folgende:Löschen Sie Datensätze aus Elasticsearch nach Abfrage

curl -XDELETE 'http://localhost:9200/twitter/twit/_query' -d ' 
{ 
    "filter" : { 
      "range" : { 
       "date_time" : { "from" : "2012-10-01 00:00:01", "to" : "2013-05-01 11:59:59"} 
      } 
     } 
}' 

, aber es löscht keine Datensätze. also ist es richtig oder gibt es andere Methoden um Datensätze zu löschen.

Antwort

13

Vor 1.0 verwendet das Löschen nach Abfrage keine Filter. Die Syntax bezieht sich direkt auf den Block "query" in der Such-API. Sie müssen stattdessen die range query verwenden.

curl -XDELETE 'http://localhost:9200/twitter/twit/_query' -d ' 
{ 
    "range" : { 
     "date_time" : { "from" : "2012-10-01 00:00:01", "to" : "2013-05-01 11:59:59"} 
    } 
}' 
+0

Oder Sie können eine filtered_query verwenden und einen Filter hinzufügen. Der Unterschied besteht darin, dass Filter zwischengespeichert und leistungsfähiger sind. – javanna

+1

Ich glaube, wenn Sie abfragen, um zu löschen, möchten Sie vermeiden, zwischengespeicherte Ergebnisse zu verwenden. –

+0

Warum? Ich denke, es hängt von der Domäne und dem Typ der Abfrage ab, die Sie ausführen. In diesem Fall geht es nicht darum, Ergebnisse zu erzielen. Es geht vielmehr darum, schneller Ergebnisse zu erzielen. In einigen Fällen möchten Sie es jedoch vermeiden, schwere Filter zu cachen, die Sie nur einmal ausführen (das können Sie übrigens auch mit elasticsearch tun). – javanna

7

Löschen nach Abfrage war seit 2.0 veraltet. Verwenden Sie Scrollen/Scannen, um alle Dokument-IDs zu finden, die Sie löschen möchten, und löschen nach IDs

Veraltet in 1.5.3.

„Löschen von Query wird in 2.0 entfernt werden: es problematisch ist, da sie leise ein Refresh zwingt die schnell OutOfMemoryError bei gleichzeitiger Indizierung führen kann, und kann auch dazu führen Primär- und Replikat inkonsistent werden Verwenden Sie stattdessen das. Scroll/Scan API alle passende IDs zu finden und dann eine Bulk-Anforderung, sie zu löschen ausgeben ..

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-delete-by-query.html

auch gibt es eine delete-by-query Plugin Sie verwenden können.

Verwandte Themen