这是场景:
想象一下,注册用户使用创建了一个新实体,price: 1 | currency: EUR而其他注册用户创建了一个新实体,price: 1 | currency: USD依此类推…
price: 1 | currency: EUR
price: 1 | currency: USD
我想要做的是根据记录价格对记录进行排序,具体取决于前端用户选择的货币(欧元或美元)。
我无法编制索引,例如price_eur或price_usd,因为费率每小时都会变化,但是如果可能的话,更新10000条记录价格的最佳方法是什么?
price_eur
price_usd
1-以下是我的建议,它可行,但是我认为这可能是更好的方法,有什么建议吗?
2-如果没有,哪种性能更好?
3-ES有一些魔力可以发挥和使用,例如price_in_eur?
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查询代替,因为基于分数的排序更快。
使用功能分数查询会更好,因为对分数值进行排序会更快。
谢谢