TLDR: Einige Felder werden analysiert, obwohl das Mapping nicht_analysiert lautet.not_analyzed in mapping wird ignoriert
Ich habe mehrere Sätze von Daten, jeder wird zu einem Elasticsearch-Index basierend auf dem in der Menge enthaltenen Datum gesendet (das gibt Indexnamen wie Index-25012016). Einige Sets haben dasselbe Datum und daher denselben Index.
Ich verwende den folgenden Perl-Befehl die Zuordnung senden
ESprint `curl -s -XPUT "http://$ELASTIC_SEARCH_URL/$currentIndexName?pretty" -d ' $mapping'`
wo $ currentIndexName und $ Mapping-Strings sind, die jeweils aussieht index-25012016
und
{
"mappings": {
"myMappingType": {
"properties": {
"present": {
"type":"boolean"
},
"records": {
"type":"integer"
},
"batchID": {
"type":"string",
"index":"not_analyzed"
},
"version": {
"type":"string",
"index":"not_analyzed"
},
"date": {
"type":"date",
"format":"yyyy-MM-dd"
},
"packageCreationDate": {
"type":"date",
"format":"MM/dd/yyyy-HH:mm"
}
}
}
}
}
mit ein paar mehr Felder. Dieser Befehl wird für alle Mengen wiederholt, mit Ausnahme von $ currentIndexName, die ich bereits zuvor erstellt habe. die Antwort von ES Wenn der Befehl ausgeführt wird, ist
{
"acknowledged" : true
}
Ob dieser Abbildungsschritt übersprungen wurde oder erreicht, ich sende die Daten dann an ES mit `curl -s -XPOST "$ELASTIC_SEARCH_URL/$currentIndexName/_bulk?pretty" --data-binary \@$outputFileName`;
wobei $ output ist der Name einer JSON-Datei.
Das Problem ist, dass, obwohl ich not_analyzed, in Kibana/Einstellungen/Indizes, die Zeichenfolge Felder sind sowohl analysiert als auch indiziert, wo ich nur indiziert werden wollte markiert. Da zum Beispiel das Versionsfeld für alle gleich ist ("3.2.506 64-Bit"), zeigt ein Kreisdiagramm drei gleiche Abschnitte von "3.2.506", "64" und "Bit" anstelle von a ganz ungeschnitten "3.2.506 64-bit" Kuchen. Boolesche Werte, Zahlen, Datumsfelder und Meta-Felder werden jedoch nicht analysiert.
Das Indexmuster in Kibana stimmt mit allen diesen Indizes überein (index- *) und verwendet das Datum als zeitbasiertes Ereignisfeld. Ich habe versucht, das Indexmuster nach dem Senden der Daten neu zu erstellen, es ändert nichts. Ich bin auf Windows 7 und nicht Logstash verwenden.
EDIT: Da ich eine Menge Tests im Moment tun, das Skript jedes Mal gestartet wird, entferne ich die Daten, bevor mit print `curl -s -XDELETE "http://localhost:9200/index-*?pretty`;
über die Sets Iterieren Daher das Skript wie folgt aussieht:
Remove data
for each set in allSets
mapping (if not already mapped in a previous iteration)
send data to ES
Danke, Sie mich daran erinnert, habe ich vergessen, etwas zu schreiben wichtig: Ich lösche die Daten tatsächlich bevor ich den Prozess starte (siehe bearbeitete Antwort). Erstellt der Mapping-Schritt also nicht den Index, an den ich dann die Daten sende? – LogicalKip
Gibt ES die korrekte Zuordnung für Ihren Index zurück, wenn Sie eine GET-Anforderung an http: // localhost: 9200/Ihr-Indexname? Pretty = true ausführen, nachdem Ihr Skript abgeschlossen wurde? Wenn ja, würde ich versuchen, die Feldliste in Kibana für das Indexmuster aufzufrischen. Wenn das nicht funktioniert, dann gibt es vielleicht noch alte Indizes mit dem alten Mapping, die dem Kibana-Indexmuster entsprechen? Wie auch immer, sehen Sie sich die von mir erwähnten Indexvorlagen an, da sie korrekte Mappings bei der Indexerstellung anwenden und Sie das Mapping nicht selbst ändern müssen. – const314
Noch nicht sicher, warum es vorher nicht funktioniert hat, aber automatische Indexvorlagen haben den Trick gemacht. Vielen Dank. – LogicalKip