elasticsearch中使用scripted_metric进行排序
一个用户拥有id,mobile,nickname以及一个huanbi数组。现在已经可以通过scripted_metric将符合条件的huanbi数据汇总到一起,但是在最终reduce阶段的时候尝试进行排序未得到想要的结果,虽然使用java脚本指定要求排序,但是最终出来的结果依旧是乱序,望大神指点迷津。(mapping及代码在下面)
mapping:
{
"dgcrm-allinone" : {
"mappings" : {
"properties" : {
"huanbi" : {
"type" : "nested",
"properties" : {
"evaluation" : {
"type" : "keyword"
},
"finalizationScore" : {
"type" : "integer"
},
"id" : {
"type" : "integer"
},
"sumScore" : {
"type" : "integer"
}
}
},
"id" : {
"type" : "long"
},
"mobile" : {
"type" : "keyword"
},
"nickname" : {
"type" : "keyword"
}
}
}
}
}
脚本如下:
POST /dgcrm-allinone/_search?filter_path=aggregations
{
"aggs":{
"allHuanbi":{
"scripted_metric": {
"init_script": "state.huanbi=new ArrayList();",
"map_script": "for(item in params._source.huanbi){state.huanbi.add(item);}",
"combine_script": "return state;",
"reduce_script": "ArrayList finalResult = new ArrayList();for(s in states){finalResult.add(s)}Collections.sort(finalResult, Collections.reverseOrder());return finalResult;"
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
还是我自己来吧.
如果想逆序排列的话要么把naturalOrder改成reverseOrder,还有一种就是把naturalOrder()变成naturalOrder().reversed()