2016-05-23 17 views
-1

Ich habe zwei Arten von Protokollen in ES (rtmp und Apache), Apache hat clientip.raw und rtmp hat ipclient.raw. Das Problem ist: Wie kann ich in meinem Kibana-Panel nur die Daten sehen, die diese Bedingung "ipclient" = "clientip" haben?Wie vergleicht man den Wert von zwei Feldern in Kibana

Ich habe versucht, diese Bar in meiner Suche zu schreiben, aber nicht funktioniert:

{ 
"query": { 
    "filtered": { 
     "filter": { 
      "script": {"script": "doc['clientip.raw'].value == doc['ipclient.raw'].value"} 
      } 
     } 
    } 
} 

Antwort

0

Sie können die folgende Abfrage schreiben: -

{"constant_score":{"filter":{"script" : { "script" : "doc['clientip.raw'].value == doc['ipclient.raw'].value"}}}} 

Sie haben einen Fehler sehen können, während über Abfrage wie zum Beispiel: -

Script [Skripte vom Typ [inline], Betrieb [Suche] und lang [groovy] ist deaktiviert]

diesen Fehler zu beheben, bearbeiten Sie Ihre elasticsearch.yml Datei und geben Sie die folgende Eigenschaft am Ende: -

script.inline:on 

Dann können Sie Ihren Elasticsearch Knoten oder Cluster neu starten und Abfrage dann das gleiche auf Kibana die holt Sie die gewünschten Datensätze.

+0

Hallo! Zuerst danke für deine Antwort, aber es funktioniert nicht, der Fehler erscheint und in meiner elasticsearch.yml habe ich diese Konfiguration gesetzt: script.groovy.sandbox.enabled: true script.engine.groovy.file.search: true script.engine.groovy.inline.aggs: auf script.engine.groovy.inline.search: auf script.search: auf script.indexed: auf script.inline: auf –

+0

Gerade setzen script.inline: auf an Ende, entfernen Sie alle anderen Eigenschaften, wie von Ihnen erwähnt, und starten Sie den Elasticsearch-Knoten neu. Überprüfen Sie auch nach dem Neustart, ob elasticsearch funktioniert oder nicht. Wenn elasticsearch nach dem Hinzufügen dieser Eigenschaft ordnungsgemäß gestartet wird, funktioniert es auch in Kibana. –

+0

Das Skript funktioniert, aber ich bekomme nicht die Datensätze, die die Bedingung erfüllen ... = S –