我有一组具有唯一数字运行ID的文档,我想查找运行ID最高的文档。
我可以做两个查询。
首先,我可以找到最高的运行ID:
{
"size": 0,
"aggregations": {
"latest_run_id": {
"aggregations": {
"latest_run_id": {
"max": {"field": "run_id"}
}
}
}
}
}
其次,我可以找到带有运行ID的文档:
{
"filter": {
{"term": {"run_id": latest_run_id}}
}
}
有没有办法可以用一个查询来完成这个?
答案 0 :(得分:24)
你可以通过组合"排序"来实现这一目标。和"尺寸":
`{
"filter" : {
"match_all" : { }
},
"sort": [
{
"run_id": {
"order": "desc"
}
}
],
"size": 1
}`
这将返回最高run_id
答案 1 :(得分:1)
可以使用热门点击聚合
检索保留最大值的整个文档{
"size": 0,
"aggs":{
"doc_with_max_run_id": {
"top_hits": {
"sort": [
{
"latest_run_id": {
"order": "desc"
}
}
],
"size": 1
}
}
}
}
同样通过修改'size'聚合参数,可以检索n-top文档。
答案 2 :(得分:0)
您可以使用以下代码在Java中获得此结果
SearchResponse max_r = maxCTSRB.setQuery(QueryBuilders.matchAllQuery())
.addAggregation(AggregationBuilders.max("latest_run_id").field("run_id"))
.addSort(new FieldSortBuilder("run_id").order(SortOrder.DESC))
setSize(1).execute().get();
聚合仅用于验证。您可以完全省略
答案 3 :(得分:0)
只需用C#翻译Adam Drewery上面所说的话。
var response = await elasticSearchContext.ElasticClient.SearchAsync<MyClass>(s =>
s.Query(q => q.MatchAll()).Sort(d => d.Descending(p => p.run_id)).Size(1));