Elasticsearch动态过滤器(价格*货币换算率)

时间:2016-03-19 09:33:59

标签: elasticsearch

用户可以使用价格创建新实体。价格可以是不同的货币(欧元,美元......),因此我们可以通过乘以(价格* convert_rate)来获得实际价格。

我尝试做的是按价格过滤记录,具体取决于前端用户选择的货币和金额(欧元或美元)。

问题是费率经常变化,所以我不能更新每个文件的费率。

有没有办法按数组过滤(使用rate_id => convert_rate),或者在查询中通过currency_id动态导入convert_rate?像这样:

    {
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "doc[\"price\"].value * convert_rate > 5"
        }
      }
    }
  }
}

编辑:

每个产品都有currency_id。通过currency_id,我想找到convert_rate,然后将其与价格相乘。

货币汇率可以是其他文件或阵列。

也许这会澄清我需要做什么

    "products" :    {
        "properties" : {
            "id" : {
                 "type" : "integer"
             },
        "currency_id" : {
             "type" : "integer"
        },
        "price" : {
              "type" : "double"
        }
    }
}




{
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "doc[\"price\"].value  > convert_rate",
          "params" : {
               "convert_rate" : **get.convert_rate.where.currency_id == doc[\"currency_id\"].value**
            }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

查看自定义参数 - 您可以将查询中的enything传递给脚本

https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-script-query.html