2016-05-18 13 views
5

Die Funktion, die ich versuche, FullFit ist eine Metrik in Kibana erstellen, die die Anzahl der Benutzer "nicht validiert" anzeigen. Ich sende ein Protokoll gesendet, wenn ein Benutzer registriert, dann ein Protokoll, wenn ein Benutzer validiert ist.Feld [] verwendet in Ausdruck existiert nicht in Zuordnungen

Also die Anzahl, die ich will, ist die Differenz zwischen der Anzahl der registrierten und der Anzahl der validierten. In Kibana kann ich eine solche mathematische Operation nicht durchführen, daher habe ich eine Umgehungslösung gefunden: Ich habe ein "Skriptfeld" namens "nicht validiert" hinzugefügt, das gleich 1 ist, wenn ein Benutzer registriert wird und -1, wenn ein Benutzer sein Konto validiert . Die Summe des Feldes "nicht validiert" sollte die Anzahl der nicht validierten Benutzer sein.

Dies ist das Skript, das ich in meinem Skript Feld definiert: doc['ctxt_code'].value == 1 ? 1 : doc['ctxt_code'].value == 2 ? -1 : 0

mit:

  • ctxt_code 1 als Registerprotokoll

  • ctxt_code 2 als validierte Protokoll

Diese se TUP funktioniert gut, wenn alle meine Protokolle ein „ctxt_code“, aber wenn ein Protokoll ohne dieses Feld gedrückt wird Kibana führt den folgenden Fehler:

Field [ctxt_code] used in expression does not exist in mappings kibana error

ich diesen Fehler nicht verstehen kann, weil Kibana sagt:

If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0

was der Fall ist.

Jeder hat eine Ahnung?

+0

Wenn Sie französisch sind, können Sie uns auf der Elasticsearch französisch Forum helfen können: https://discuss.elastic.co/t/kibana-probleme-de-scripted-field-qui-nexiste-soit-disant-pas-dans-le-mapping/50618 – lenybernard

+0

Sind Sie sicher, dass das Feld 'ctxt_code' in den Mappings existiert von allen deinen logstash Indizes? Ich sehe oben rechts auf dem Screenshot, dass Sie an den letzten sieben Tagen arbeiten. Können Sie sicherstellen, dass die Logstash-Indizes der letzten sieben Tage das Feld "ctxt_code" im erstellten Mapping enthalten? – Val

+0

Keine Nachrichten gute Nachrichten? – Val

Antwort

2

Es ist OK, Protokolle ohne das ctxt_code Feld zu haben ... aber Sie müssen eine Zuordnung für dieses Feld in Ihren Indizes haben. Ich sehe, dass Sie mehrere Indizes mit logstash-* abfragen, also treffen Sie wahrscheinlich eine, die es nicht hat.

Sie können ein Mapping für Ihr Feld in alle Indizes aufnehmen. Gehen Sie einfach in Sense und verwenden diese:

PUT logstash-*/_mappings/[your_mapping_name] 
{ 
    "properties": { 
    "ctxt_code": { 
     "type": "short",   // or any other numeric type, including dates 
     "index": "not_analyzed" // Only works for non-analyzed fields. 
    } 
    } 
} 

Wenn Sie bevorzugen Sie es von der Kommandozeile tun: CURL -XPUT 'http://[elastic_server]/logstash-*/_mappings/[your_mapping_name]' -d '{ ... same JSON ... }'