【问题标题】:Passing dynamic value to script query in Elastic Search将动态值传递给 Elastic Search 中的脚本查询
【发布时间】:2015-11-23 10:29:28
【问题描述】:

我的索引中有两个映射。其中一个以不同货币存储一些金额,其他存储当前转换率。每个中的记录如下所示:

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 的当前转换率并获得结果。

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

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

但是,在我的例子中,传递的参数是从另一个查询的结果中获取的。

我想以通用货币在 Kibana 中可视化我的数据。 Kibana 支持脚本化查询。据我所知,Kibana 中的所有可视化都可以对应于单个弹性搜索查询,因此我无法选择执行多个查询。

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

【问题讨论】:

  • 如果您构建的插件可以访问您存储来自其他查询的数据的数据库,该怎么办?

标签: elasticsearch


【解决方案1】:

假设您总是尝试以美元进行交易,您可以尝试the accepted answer here 中描述的方法:

本质上:

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

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2021-10-12
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多