Elasticsearch:按给定映射中的最大字段值过滤

Elasticsearch: filter by max field value in a given mapping

关于这个 Elasticsearch 映射

PUT /some-index/_mapping/some-mapping
{
  "properties": {
    "group-id": {
      "type": "keyword"
    },
    "id": {
      "type": "keyword"
    },
    "some-other-field": {
      "type": "keyword"
    }
  }
}

假设我们有这样的值

[
  { "group-id": "1", "id": "1", "some-other-field": "some" },
  { "group-id": "2", "id": "2", "some-other-field": "other" },
  { "group-id": "2", "id": "3", "some-other-field": "field" }
]

正在尝试构建查询

Return 所有具有最大 group-id 的记录。在此特定示例中,它应该恰好 return 最后 2 个项目,包括 idsome-other-field。当然,随着新记录被编入索引,最大的 group-id 可能会变得更大。如果发生这种情况,应该 return 编辑一组全新的结果,因为之前的结果将不再包含最大的 group-id

如果您需要支持最大的 ID,您应该将字段类型更改为数字。

您可以使用 max 聚合首先找出最大值(如果这是一个数字字段),然后执行第二个查询,搜索具有该最大值的所有文档(不要害怕执行多个查询来回答您的问题,完全没问题。