Elasticsearch按动态价格排序

Sfb*_*auw 5 elasticsearch

这是场景:

想象一下,注册用户创建了一个新实体,price: 1 | currency: EUR而其他注册用户创建了一个新的实体,price: 1 | currency: USD依此类推......

我想要做的是根据前端用户选择的货币(欧元或美元)按价格排序记录.

我不能索引,例如price_eur或者price_usd,因为费率每小时都在变化,但如果可能的话,更新10000条记录的价格的最佳方法是什么?

1 - 以下是我的建议,它有效,但我认为可能是一个更好的方法,任何建议?

2 - 如果没有,那么更好的性能方法是什么?

3 - ES有一些魔法文件可以播放和使用,用于示例price_in_eur吗?

功能评分

{
    "query": {
        "function_score": {
            "functions": [
                {
                    "script_score": {
                        // 1 EUR = 0.74452 USD
                        "script": "('EUR' == _source.currency ? doc['boat.price'].value : doc['boat.price'].value * 0.744520)"
                     }
                }
            ],
            "query": {
                "filtered": {
                    "query": { "match_all":{} }
                }
            }
        } 
    },
    "sort": { "_score": { "order": "desc" }}
}
Run Code Online (Sandbox Code Playgroud)

排序脚本

{
    "fields": ["_source"],
    "query": { "match_all": {} },  
    "sort": {
        "_script": {
            // 1 EUR = 0.74452 USD
            "script": "('EUR' == _source.currency ? doc['boat.price'].value : doc['boat.price'].value * 0.744520)",
            "type" : "number",
            "order": "asc"

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间.

dar*_*dow 4

ES 没有直接的方式自动为您进行价格转换。您正在做的事情就是完成任务的正确方法。您应该使用函数分数查询,因为它比基于单个脚本的排序更好。正如文档所述:

请注意,对于基于单个自定义脚本的排序,建议使用 function_score 查询,因为基于分数的排序速度更快。

使用函数分数查询会更好,因为对分数值进行排序更快。

谢谢