2014-11-13 5 views
8

Ich weiß, wie man delete an entire ElasticSearch index, aber wie löscht man alle Dokumente aus einem Index?ElasticSearch und NEST: Wie löscht man alle Dokumente aus einem Index?

Meine Motivation: Ich hätte gerne eine "ReIndex" -Methode, die den gesamten Inhalt eines Indexes löscht, so dass ich alle Dokumente neu laden kann.

ElasticSearch Syntax wäre helful. NEST-Syntax wäre noch besser.

+2

DeleteByQuery jetzt veraltet. Hat jemand die neueste Syntax in Nest 2-Versionen? – LMK

Antwort

13

Ich war auf der Suche nach etwas ähnliches in Nest und ich dachte, dass ich hier die Syntax für jedermann setzen würde suchen:

var node = new Uri("http://localhost:9200"); 
var settings = new ConnectionSettings(node); 
var client = new ElasticClient(settings); 

client.DeleteByQuery<ElasticsearchProject>(del => del 
    .Query(q => q.QueryString(qs=>qs.Query("*"))) 
); 
1

$ curl -XPOST localhost:9200/myindex/_optimize ....

Der Optimierungsprozess alle softdeletes von Ihnen durch Löschen durch Abfrage getan reinigen wird.

Wir sind auch konfrontiert mit einem simillar Problem, wo wir eine Menge von Dokumenten löschen.Wir bewegen wirklich viele Dokumente von einem Index zum anderen, wie wir Daten nach Datum geschichtet haben. Aber da ES das Verschieben von Daten von einem Index zu einem anderen nicht unterstützt.

Aber Optimierung, ist eine kostspielige Operation, da es viele IO-Suchen verbraucht. Wenn Sie nur für Löschvorgänge löschen möchten, dann können Sie das Flag "only_expunge_deletes" verwenden, um Segmente nur mit Löschvorgängen zusammenzuführen.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-optimize.html

0
**To delete all Records -** 
client.DeleteByQuery<ElasticsearchProject>(del => del 
      .Query(q => q.QueryString(qs=>qs.Query("*")) 
     )); 
**To delete index-** 
client.DeleteIndex(d => d.Index("index_name"));