2017-05-06 3 views
-1

Wir haben einen einfachen Index namens Mitarbeiter, in denen wir nur 2 Felder Vorname, Nachname haben. Mit dem logstash-Skript laden wir unsere Mitarbeiterdaten. Wir möchten doppelte Datensätze nicht im Index speichern, obwohl wir Duplikate in der Datendatei haben. Wenn in diesem Fall Vorname + Nachname identisch sind, sollte der Datensatz nicht zum Index hinzugefügt werden.Logstash - wie man doppelte Datensätze verhindert

logstash script is: 

input { 
    file { 
     path => "C:/employees.csv" 
    } 
    } 
filter { 
    csv { 
     columns => [ 
      "firstname", 
      "lastname" 
     ] 
     separator => "," 
     } 
    } 
output { 
elasticsearch{ 
    hosts => ["localhost:9200"] 
    index => "employees" 
    } 
} 

data file - employees.csv 

john,doe 
jane,doe 
john,doe - this record should not be added to the index. 

I went through lot of documentation and searched a lot for adding conditions in the filter clause. however, no luck so far. 

Can any one provide inputs on this. 

thanks 

Antwort

1

Es klingt wie Sie für die Elasticsearch Mapping _id Feld suchen. Wenn Sie dieses Feld basierend auf einem Hash von Nachnamen/Vornamen (oder etwas Ähnliches) pro Zeile festlegen, sollten Sie vermeiden, doppelte Daten einzufügen.

Elasticsearch ist autogenerating unique ids pro Zeile, wenn Sie nicht angeben, was Sie möchten, dass _id zu sein.

Edit: Wenn Nachname + Vorname einzigartig genug für Ihr Daten-Set ist

... 
output { 
    elasticsearch { 
     hosts => ["localhost:9200"] 
     index => "employees" 
     _id => "%{lastname}%{firstname}" 
    } 
} 
+0

Können Sie mir die Syntax zur Verfügung stellen, den Index auf einem Hash-Basis erstellen von Nachnamen + Vornamen. Danke –

+0

Danke, es hat perfekt funktioniert. –

+0

Akzeptiert als Antwort. Ich habe 2 weitere Fragen. 1) Wenn ich denselben Datensatz mit anderen geänderten Feldern erhalte, wird der Datensatz nicht aktualisiert. grundsätzlich suche ich nach upsert. für zB: seine Bezeichnung, Gehalt wird geändert, dann muss der vorhandene Datensatz aktualisiert werden. Irgendwelche Eingaben dazu? 2) Gibt es irgendeinen Performance-Overhead bei der Verwendung der Hash-ID (Vorname + Nachname) anstelle der automatisch generierten ID von Elastic? Vielen Dank im Voraus –

Verwandte Themen