【发布时间】:2014-08-04 01:15:35
【问题描述】:
这是场景:
假设注册用户使用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" }}
}
排序脚本
{
"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"
}
}
}
感谢您的宝贵时间。
【问题讨论】:
标签: elasticsearch