2016-08-31 7 views
0

Ich verwende ElastciSearch 2.3.0Elasticsearch NEST Alles löschen Dokument

Ich versuche, Dokumente aus dem Elasticsearch zu löschen.

Ich möchte nur alle Dokumente löschen und nicht die _mapping

DeleteByQueryRequest r = new DeleteByQueryRequest(new IndexName() { Name = indexName }); 
r.QueryOnQueryString = "*";        
var response = client.DeleteByQuery(r); 

Ich versuche, sich diese obigen Code durch die Verwendung zu tun, aber es funktioniert nicht.

Bitte schlagen Sie vor, was mit dem obigen Code falsch ist oder wie dies gemacht werden kann.

Vielen Dank für Ihre Hilfe im Voraus.

+0

Welche Version von Elasticsearch verwenden Sie? – Val

+0

Ich würde empfehlen, die Zuordnung zu einem neuen Index zu kopieren und den vorhandenen Index zu löschen. Das Löschen aller _ Dokumente in einem Index, um das Mapping zu erhalten, ist eine sehr teure Operation! –

+0

Ich benutze 2.3.0 Version von elasticsearch – user581453

Antwort

2

Verwenden Sie nicht löschen von Abfrage wurde ein Plugin seit elastisch 2.0 aus einem guten Grund gemacht. Sie können die Ausnahmen für den Arbeitsspeicher einfach entfernen. Sie sollten den gesamten Index löschen und die Zuordnungen

var res = db.LowLevel.IndicesGetMapping<JObject>("test_index"); 
var delete = db.DeleteIndex(new DeleteIndexRequest("test_index")); 
var mappings = res.Body["test_index"].ToString(); 
var create = db.LowLevel.IndicesCreate<JObject>("test_index", mappings); 

static void Main(string[] args) 
     { 
      ElasticClient db = new ElasticClient(new Uri("http://localhost.fiddler:9200")); 

      db.IndexMany(Enumerable.Range(0, 100).Select(i => new Data { Id = i, Name = "Name" + i }), "test_index"); 

      var mappings = db.GetMapping<Data>(); 

      var delete = db.DeleteIndex(new DeleteIndexRequest("test_index")); 

      var indexMapping = mappings.IndexTypeMappings["test_index"].ToDictionary(k => k.Key, v => (ITypeMapping)v.Value); 

      db.CreateIndex(new CreateIndexRequest("test_index") 
      { 
       Mappings = new Mappings(indexMapping) 
      }); 

      Console.ReadLine(); 
     } 

     class Data 
     { 
      public int Id { get; set; } 

      public string Name { get; set; } 
     } 

Raw Kopie des Index neu erstellen Wenn Sie wirklich das Plugin sudo bin/Plugin installieren löschen-by-Abfrage installieren müssen

+0

Hallo Filip, Vielen Dank dafür. Ich habe noch ein Problem. In meinem Fall habe ich keine Klasse wie "Daten". Und wenn ich versuche, Code auf client.GetMapping auszuführen, bekomme ich einen Fehler. 'var MappingRequest = new GetMappingRequest (indexToCreate); var map = client.GetMapping (MappingRequest); ' – user581453

+0

Kein Problem, verwenden Sie einfach db.GetMapping (new GetMappingRequest (new Nest.IndexName() {Name = "test_index"}) {}); –

+0

Dies gibt den folgenden Fehler. '# FailureReason: Unrecoverable/Unexpected BadResponse beim Versuch, GET http: // localhost: 9200/contact/_mapping - [1] BadResponse: Knoten: http: // localhost: 9200/Ausnahme: JsonSerializationException Nahm: 00: 00: 00.3850932 # Audit-Ausnahme in Schritt 1 BadResponse: Newtonsoft.Json.JsonSerializationException: Fehler beim Konvertieren des Werts "analysis" in "System.Nullable" [Nest.NonStringIndexOption] '. Pfad 'index', Zeile 1, Position 128. ---> System.ArgumentException: Angeforderter Wert 'analysiert' wurde nicht gefunden. ' – user581453

0

Es hat funktioniert. Vielen Dank.

var res = db.LowLevel.IndicesGetMapping<JObject>("test_index"); 
var delete = db.DeleteIndex(new DeleteIndexRequest("test_index")); 
var mappings = res.Body["test_index"].ToString(); 
var create = db.LowLevel.IndicesCreate<JObject>("test_index", mappings); 
+0

Wenn es geholfen hat, bitte upvote ihre Antwort und wenn es die Lösung für das Problem, bitte markieren Sie es als akzeptiert. Vielen Dank! –

Verwandte Themen