身安不如心安,屋宽不如心宽 。

es如何分段查询排序

Elasticsearch | 作者 superbool | 发布于2016年10月19日 | 阅读数:4606

需要根据es中的某个field,值类型是个整数,根据这个字段分成两半,都按照插入的时间(已在es中存了插入时间字段)排序,比如:要求field>60 ,查询的结果为
时间          filed
10-19         79
10-19         80
10-19         61
10-18         79
10-17         80
10-16         61
10-15         79
10-13         80       ____这以上都是field>=60的 这后面都是<60的  两部分都是按照时间排序
10-19         59
10-18         47
10-16         58
10-14         12
 
已邀请:

martindu - 搜披露创始人

赞同来自:

设置一个bool query,must里面写matchall或者其他查询,should里面写rangequery,比如field>60,然后给这个rangequery加权重,足够大。整个bool query嵌套进一个functionscorequery里面。
 
参考http://elasticsearch.cn/question/863
 

superbool

赞同来自:

多谢  目前使用script实现了这个功能:
{
"query": {
"match_all": {}
},
"sort": [
{
"_script": {
"type": "number",
"script": "doc['rating'].value > 0.9 ? 1 : 0"
,
"order": "desc"
},
"createdAt": {
"order": "desc"
}
}
]
}
但是在效率上不如过滤查询

要回复问题请先登录注册