2015-10-05 6 views
6

Mam dwa odwzorowania w moim indeksie. Jeden z nich przechowuje pewną kwotę w różnych walutach, a inne przechowuje bieżący współczynnik konwersji. Zapisy w każdy wyglądać następująco:Przekazywanie wartości dynamicznej do kwerendy skryptu w wyszukiwaniu elastycznym

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" 
    } 
}] 

i

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

Chcę kwerendy danych z amount i zastosować aktualne przeliczniki z conversions w jednym zapytaniu i uzyskać wynik .

Próbowałem za pomocą skryptów zapytanie i był w stanie konwertować dane w oparciu o przekazane params jak:

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

Jednak w moim przypadku minęło params mają być pobrane od wyniku innego zapytania.

Chcę wizualizować moje dane w Kibanie we wspólnej walucie. Kibana obsługuje zapytania skryptowe. Zgodnie z moją wiedzą wszystkie wizualizacje w Kibana mogą odpowiadać pojedynczemu elastycznemu zapytaniu, więc nie mam opcji do wykonywania wielu zapytań.

Próbowałem również zbadać możliwość użycia https://www.elastic.co/blog/terms-filter-lookup i dodanie niektórych dynamicznych pól do każdego dokumentu w zestawie wyników. Jednak nie sądzę, że filtr term pozwala na to.

Odpowiedz

2

Zakładając, starasz się zawsze wykreślić transakcje w USD, można spróbować metody opisanej w the accepted answer here:

W istocie:

  1. modelu dane rodzic-dziecko z każdego dokumentu conversions bycia rodzic wszystkich dzieci transactions dokument w tej samej walucie obcej. (I conversions o standardowej nazwie pola, takiej jak "conversion_divisor": 62.6)
  2. Dołącz klauzulę zapytania dla wszystkich odpowiednich przeliczeń walut.
  3. Użyj zapytania o numer: function_score (script_score), aby uzyskać dostęp do wielokrotności waluty obcej w każdym z obiektów nadrzędnych i wygeneruj _score dla każdej transakcji, dzieląc kwotę transakcji przez walutę obcą conversion_divisor.
  4. Wykreśl _score w Kibana