在Elastic Search中将动态值传递给脚本查询

Abh*_*don 6 elasticsearch

我的索引中有两个映射.其中一个以不同货币存储一些金额,其他商店存储当前转换率.每个记录看起来像这样:

http://localhost:9200/transactions/amount
Run Code Online (Sandbox Code Playgroud)
[{
    _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"
    }
}]
Run Code Online (Sandbox Code Playgroud)

http://localhost:9200/transactions/conversions
Run Code Online (Sandbox Code Playgroud)
{
    _index: "transactions",
    _type: "conversions",
    _id: "rates",
    _score: 1,
    _source: {
        "usd": 1,
        "inr":62.6
    }
}
Run Code Online (Sandbox Code Playgroud)

我想amountconversions单个查询中查询数据并应用当前转换率并获得结果.

我尝试使用脚本化查询,并能够根据传递的参数转换数据,如:

GET _search
Run Code Online (Sandbox Code Playgroud)
{
   "query": {
      "match_all": {}
   },
   "script_fields" : {
        "test1" : {
            "script" : "_source.balance * factor",
            "params" : {
                "factor"  : 63.2
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在我的情况下,传递的params将从另一个查询的结果中获取.

我想以共同货币在Kibana中可视化我的数据.Kibana支持脚本查询.据我所知,Kibana中的所有可视化对应于单个弹性搜索查询,因此我没有选项可以进行多个查询.

我还尝试探索使用https://www.elastic.co/blog/terms-filter-lookup并向结果集中的每个文档添加一些动态字段的可能性.但是,我不认为术语过滤器允许这样做.

Pet*_*ses 3

假设您尝试始终以美元绘制交易,您可以尝试此处接受的答案中描述的方法:

在本质上:

  1. 对数据父子进行建模,每个文档都是相同外币conversions的所有子文档的父文档。transactions(并且conversions有一个标准的字段名,例如"conversion_divisor": 62.6
  2. 包括has_parent所有相关货币换算的查询子句。
  3. 使用function_score( script_score) 查询访问每个父项中的外币倍数,并_score通过将交易金额除以外币来为每笔交易生成一个倍数conversion_divisor
  4. _score在 Kibana 中绘制