2015-10-05 6 views
6

Ich habe zwei Zuordnungen in meinem Index. Einer von ihnen speichert einige Beträge in verschiedenen Währungen und anderen Geschäften aktuellen Umrechnungskurs. in jeder Aufzeichnungen wie folgt aussehen:Übergabe des dynamischen Werts an die Skriptabfrage in der Elastic Search

http://localhost:9200/transactions/amount 
[{ 
    _index: "transactions", 
    _type: "amount", 
    _id: "AVA3fjawwMA2f8TzMTbM", 
    _score: 1, 
    _source: { 
     balance: 1000, 
     currency:"usd" 
    } 
}, 
{ 
    _index: "transactions", 
    _type: "amount", 
    _id: "AVA3flUWwMA2f8TzMTbN", 
    _score: 1, 
    _source: { 
     balance: 2000, 
     currency:"inr" 
    } 
}] 

und

http://localhost:9200/transactions/conversions 
{ 
    _index: "transactions", 
    _type: "conversions", 
    _id: "rates", 
    _score: 1, 
    _source: { 
     "usd": 1, 
     "inr":62.6 
    } 
} 

ich die Daten von amount abfragen möchten und aktuellen Umrechnungskurse von conversions in einer einzigen Abfrage anwenden und Ergebnis erhalten .

Ich habe versucht, scripted Abfrage mit und war in der Lage, die Daten zu konvertieren, basierend auf übergeben params wie:

GET _search 
{ 
    "query": { 
     "match_all": {} 
    }, 
    "script_fields" : { 
     "test1" : { 
      "script" : "_source.balance * factor", 
      "params" : { 
       "factor" : 63.2 
      } 
     } 
    } 
} 

aber in meinem Fall bestand params aus dem Ergebnis einer anderen Abfrage abgerufen werden soll.

Ich möchte, dass meine Daten in Kibana in gemeinsamen Währung visualisieren. Kibana unterstützt Skriptabfragen. Nach meinem Wissen können alle Visualisierungen in Kibana einer einzelnen elastischen Suchabfrage entsprechen, so dass ich keine Möglichkeit habe, mehrere Abfragen durchzuführen.

Ich versuchte auch, die Möglichkeit zu erkunden https://www.elastic.co/blog/terms-filter-lookup verwenden und das Hinzufügen einiger dynamischen Felder zu jedem Dokument in Ergebnismenge. Ich glaube jedoch nicht, dass Term Filter dies erlaubt.

Antwort

2

Angenommen, Sie versuchen, immer Transaktionen in USD zu zeichnen, könnte man den Ansatz in the accepted answer here beschrieben versuchen:

Im Wesentlichen:

  1. Modell Ihrer Daten Eltern-Kind mit jedem conversions Dokument sein ein Elternteil des Kindes transactions Dokument in der gleichen Fremdwährung. (Und conversions mit einem Standardfeldname wie "conversion_divisor": 62.6)
  2. Fügen Sie eine has_parent Abfrageklausel für alle relevanten Währungsumrechnungen ein.
  3. Verwenden Sie eine function_score (script_score) Abfrage, um auf das Fremdwährungspaar in jedem Elternteil zuzugreifen, und generieren Sie für jede Transaktion einen _score, indem Sie den Transaktionsbetrag durch die Fremdwährung conversion_divisor dividieren.
  4. Plot die _score in Kibana
Verwandte Themen