您有两种方法可以实现此目的:一种是通过使用基于脚本的排序(如keety所述):
{ "query" : { .... <--- your query goes here }, "sort" : { "_script" : { "script" : "doc.revenue_amount.value * usd_conversion_rate", "type" : "number", "params" : { "usd_conversion_rate" : 0.4273 <--- the conversion rate to USD }, "order" : "desc" } }}该
usd_conversion_rate因素是转化率美元。因此,例如,如果1美元价值2.34单位另一种货币,则
usd_conversion_rate系数为
1/ 2.34(或
0.4273)。乘以后,
revenue_amount您会得到美元参考货币的金额。
但是,基于脚本的排序不是很有效,建议使用a,
function_score以便可以按分数对结果进行排序。这使我们找到了实现您所需要的第二种方式,它就是这样。一种方法是使用
script_score函数,但这又涉及脚本。
{ "query": { "function_score": { "query": {}, "functions": [ { "script_score": { "script": "doc.revenue_amount.value * usd_conversion_rate", "boost_mode": "replace", "params": { "usd_conversion_rate": 0.4273 } } } ] } }}由于我们上面的脚本非常简单(即,将某个字段乘以某个系数),因此最简单的方法将涉及使用
field_value_factor,它的内容如下:
{ "query": { "function_score": { "query": { ... <--- your query goes here }, "functions": [ { "field_value_factor": { "field": "revenue_amount", "boost_mode": "replace", "factor": 0.4273 <--- insert the conversion rate here } } ] } }}更新
根据您的最新评论,看来适合您的选择
script_score毕竟是使用。这里的想法是在查询表中输入所有可用的货币汇率作为
script_score脚本的参数,然后根据该
revenue_currency字段的值使用适当的汇率。
{ "query": { "function_score": { "query": {}, "functions": [ { "script_score": { "script": "doc.revenue_amount.value * (doc.revenue_currency.value == 'EUR' ? EUR : (doc.revenue_currency.value == 'AUD' ? AUD : 1))", "boost_mode": "replace", "params": { "EUR": 0.4945, "AUD": 0.5623 } } } ] } }}


