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 个项目,包括 id 和 some-other-field。当然,随着新记录被编入索引,最大的 group-id 可能会变得更大。如果发生这种情况,应该 return 编辑一组全新的结果,因为之前的结果将不再包含最大的 group-id。
如果您需要支持最大的 ID,您应该将字段类型更改为数字。
您可以使用 max
聚合首先找出最大值(如果这是一个数字字段),然后执行第二个查询,搜索具有该最大值的所有文档(不要害怕执行多个查询来回答您的问题,完全没问题。
关于这个 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 个项目,包括 id 和 some-other-field。当然,随着新记录被编入索引,最大的 group-id 可能会变得更大。如果发生这种情况,应该 return 编辑一组全新的结果,因为之前的结果将不再包含最大的 group-id。
如果您需要支持最大的 ID,您应该将字段类型更改为数字。
您可以使用 max
聚合首先找出最大值(如果这是一个数字字段),然后执行第二个查询,搜索具有该最大值的所有文档(不要害怕执行多个查询来回答您的问题,完全没问题。