一、查询结果按某个字段进行排序

{

"size" : 5,

"query" : {

"bool" : {

"filter" : [

{

"range" : {

"startTime" : {

"from" : 1517046960000,

"to" : 1517048760000

}

}

}

]

}

},

"sort" : [{ "startTime" : { "order" : "desc"}}

]

}

//javaApi设置查询数量size和对orderstr进行正序

SearchRequestBuilder srb = this.createSearchRequestBuilder(new Date(begin), new Date(end));

srb.setQuery(queryBuilder).setSize(queryParam.getPageIndex() * queryParam.getPageSize())

.addSort(orderStr, SortOrder.ASC);

二、聚合结果进行排序

1、根据查询到文档数量

聚合结果为查询到文档的数量倒序:"order" : { "_count" : "desc" }

{"size": 0,

"query" : {

"bool" : {

"filter" : [

{ "range" : {

"startTime" : {

"from" : 1515655800000,

"to" : 1516865400000

}

} },

{ "term" : {

"type" : {

"value" : "URL",

"boost" : 1.0

}

} }

]

}

},

"aggregations" : {

"CATEGORY" : {

"terms" : {

"field" : "errorCode",

"size" : 5,

"order" : {

"_count" : "desc"

}

}

}

}

}

//在java代码中不能直接使用“_count” 使用如下的方式查询

TermsAggregationBuilder termsAggBuilder=AggregationBuilders.terms(AggAlias.CATEGORY.getValue()).field(cateGoryFieldName);

termsAggBuilder.order(Terms.Order.count(false)).size(5);

(2)、根据子聚合的结果进行排序

{

"query" : {

"bool" : {

"filter" : [

{

"term" : {

"type" : {

"value" : "URL",

"boost" : 1.0

}

}

}

]

}

},

"aggregations" : {

"CATEGORY" : {

"terms" : {

"field" : "name",

"size" : 5,

"order" : {"responseTime.avg" : "asc" }

},

"aggregations" : {

"responseTime" : {

"extended_stats" : {

"field" : "durationInMillis",

"sigma" : 2.0

}

},

"error" : {

"sum" : {

"script" : {

"inline" : "def errorTemp=doc['status'].value; if(errorTemp=='0'){return 0;}else{return 1;}",

"lang" : "painless"

}

}

},

"apdex" : {

"avg" : {

"script" : {

"inline" : "def responseTemp=doc['durationInMillis'].value; if(responseTemp>params.threshold){return 0.5;}else{return 1;}",

"lang" : "painless",

"params" : {

"threshold" : 20.0

}

}

}

},

"errorRate" : {

"percentile_ranks" : {

"script" : {

"inline" : "def errorTemp=doc['status'].value; if(errorTemp=='0'){return 1;}else{return 0;}",

"lang" : "painless"

},

"values" : [

0.0

],

"keyed" : true,

"tdigest" : {

"compression" : 100.0

}

}

}

}

}

}

}

//注意根据上面的语句传入的参数应该是 orderStr===responseTime.avg ascOrder=true

AggregationBuilders.terms(AggAlias.CATEGORY.getValue()).field(categoryfieldName).order(Terms.Order.aggregation(orderStr,ascOrder)).size(size)   小伙伴们,如果有其他的排序方式,欢迎一起讨论。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐