单个查询以查找某些字段具有最大值的文档

use*_*201 16 elasticsearch

我有一组具有唯一数字运行ID的文档,我想找到运行ID最高的文档.

我可以做两个查询.

首先,我可以找到最高运行ID:

{
    "size": 0,
    "aggregations": {
      "latest_run_id": {
        "aggregations": {
          "latest_run_id": {
            "max": {"field": "run_id"}
          }
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

其次,我可以找到运行id的文件:

{
    "filter": {
        {"term": {"run_id": latest_run_id}}
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用一个查询来做到这一点?

Ada*_*ery 29

您可以通过组合"排序"和"大小"来实现此目的:

`{
  "filter" : {
    "match_all" : { }
  },
  "sort": [
    {
      "run_id": {
        "order": "desc"
      }
    }
  ],
  "size": 1
}`
Run Code Online (Sandbox Code Playgroud)

这将返回最高记录 run_id

  • 我们如何使用java API 来实现这一点? (2认同)

Woj*_*cki 5

可以使用top hits聚合检索保持最大值的整个文档

{
    "size": 0,
    "aggs":{
        "doc_with_max_run_id": {
            "top_hits": {
                "sort": [
                    {
                        "latest_run_id": {
                            "order": "desc"
                        }
                    }
                ],
                "size": 1
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,通过修改 'size' 聚合参数,可以检索 n-top 文档。