Elasticsearch按动态价格排序

这是场景:

想象一下,注册用户使用创建了一个新实体,price: 1 | currency: EUR而其他注册用户创建了一个新实体,price: 1 |

currency: USD依此类推…

我想要做的是根据记录价格对记录进行排序,具体取决于前端用户选择的货币(欧元或美元)。

我无法编制索引,例如price_eurprice_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" }}

}

{

"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"

}

}

}

谢谢你的时间。

回答:

ES没有直接方法可以自动为您进行价格转换。您所做的方式是完成任务的正确方法。您应该进行功能评分查询,因为与基于单个脚本的排序相比,它会更好。如文档所述:

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

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

谢谢

以上是 Elasticsearch按动态价格排序 的全部内容, 来源链接: utcz.com/qa/429953.html

回到顶部