这是情景:
想象一下,注册用户使用price: 1 | currency: EUR
创建一个新实体,其他注册用户使用price: 1 | currency: USD
创建一个新实体,依此类推......
我尝试做的是根据前端用户选择的货币(欧元或美元)按价格排序。
我无法编制索引,例如price_eur
或price_usd
,因为费率每小时都会更改,但如果可能,更新10000条记录的价格的最佳方式是什么?/ p>
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"
}
}
}
感谢您的时间。
答案 0 :(得分:4)
ES无法直接为您自动进行价格转换。你正在做的是完成任务的正确方法。您应该进行功能评分查询,因为与基于单个脚本的排序相比,它会更好。正如docs所述:
注意,建议对于基于单个自定义脚本的排序, 使用function_score查询代替基于分数的排序 更快。
使用功能得分查询会更好,因为对得分值的排序更快。
由于