2015-10-05 54 views
6

我的索引中有兩個映射。其中一家以不同貨幣和其他商店的當前轉化率存儲一些金額。在每個記錄是這樣的:在彈性搜索中將動態值傳遞給腳本查詢

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

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

我想從amount查詢數據,並從conversions在單個查詢申請電流的轉換率,並得到結果。

我嘗試使用腳本查詢,並能夠基於數據轉換傳遞PARAMS,如:

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

但是在我的情況下通過PARAMS是從另一個查詢結果取出。

我想以共同貨幣形式顯示我在Kibana中的數據。 Kibana支持腳本查詢。據我所知,Kibana中的所有可視化都可以對應一個彈性搜索查詢,所以我沒有選擇做多個查詢。

我也嘗試探索使用https://www.elastic.co/blog/terms-filter-lookup並向結果集中的每個文檔添加一些動態字段的可能性。不過,我不認爲術語過濾器允許這樣做。

回答

2

假設,你要始終情節美元的交易,你可以嘗試在the accepted answer here描述的方法:

本質:

  1. 型號您的數據親子每個conversions文件是所有子女的母公司transactions文件使用相同的外幣。 (並且conversions具有標準字段名稱,例如"conversion_divisor": 62.6
  2. 包括所有相關貨幣轉換的查詢子句has_parent
  3. 使用function_scorescript_score)查詢訪問每個父母的外幣倍數,並通過將交易金額除以外幣conversion_divisor來爲每筆交易生成_score
  4. 在基巴納繪製_score