目前我正在按文档分数对聚合进行排序,因此大多数相关项目首先出现在聚合列表中,如下所示:
{
'aggs' : {
'guilds' : {
'terms' : {
'field' : 'guilds.title.original',
'order' : [{'max_score' : 'desc'}],
'aggs' : {
'max_score' : {
'script' : 'doc.score'
}
}
}
}
}
}
我想在我的JSON中为订单条款订单数组添加另一个排序选项。但是当我这样做时:
{
'order' : [{'max_score' : 'desc'}, {"_count" : "desc"},
}
第二种不起作用。例如,当所有分数相等时,则应根据查询进行排序,但不起作用。
答案 0 :(得分:8)
作为对Andrei答案的修正...按多个标准订购聚合,您必须创建一个数组,如Terms Aggregation: Order所示,你必须是使用ElasticSearch 1.5或更高版本。
因此,对于Andrei的回答,更正是:
"order" : [ { "max_score": "desc" }, { "_count": "desc" } ]
正如Andrei所说,ES不会抱怨,但仅使用“order”元素中列出的最后一项。
答案 1 :(得分:7)
我不知道你的' aggs'甚至工作,因为我尝试了它,我在三个地方解析错误:" order"不允许有这种阵列结构,你的第二个" aggs"应放在第一个"术语之外#34; aggs,最后是" max_score" aggs应该有一个" max" " aggs"的类型。在我的情况下,为了使它工作(并且它确实正确地命令),它应该如下所示:
"aggs": {
"guilds": {
"terms": {
"field": "guilds.title.original",
"order": {
"max_score": "desc",
"_count": "desc"
}
},
"aggs": {
"max_score": {
"max": {
"script": "doc.score"
}
}
}
}
}