我有很多文件,像这样:
"_source": {
"id": "30e7fb3a-f07f-4ee0-b4dd-3604a7d1b206",
"processId": "cd88e9bc-2375-4c4a-80ef-7ec715e2c859",
"createdAt": "2024-11-14T17:56:36.694615+03:00",
"updatedAt": "2024-11-14T17:56:36.694873+03:00",
"completedAt": "2024-11-14T17:56:36.694873+03:00"
},
"_source": {
"id": "f93e926c-9370-45a9-9a16-4e4a7c3c2a94",
"processId": "cd88e9bc-2375-4c4a-80ef-7ec715e2c859",
"createdAt": "2024-11-14T17:56:36.595321+03:00",
"updatedAt": "2024-11-14T17:56:36.694341+03:00",
"completedAt": "2024-11-14T17:56:36.694341+03:00"
},
"_source": {
"id": "d71e2538-b763-47b9-bb1e-67b67f640532",
"processId": "Process_b77f8ac",
"createdAt": "2024-11-11T14:51:19.548631+03:00",
"updatedAt": "2024-11-11T14:51:19.554184+03:00",
"completedAt": "2024-11-11T14:51:19.554184+03:00"
}
我需要获取与调整后的
processId
数组匹配的所有文档(或仅一个 processId
,无关紧要),并为每个 processId
仅返回一个文档,并按字段 updatedAt
提供最新日期时间。
是否可以在一个查询中执行?
嗨,Вячеслав Чернышов,
如果我正确理解您的问题,您希望在查询中传递
processId
(可能匹配多个文档),并且仅返回具有最新 updatedAt
字段的单个文档。
这在 OpenSearch/Elasticsearch 中绝对是可能的。第一个先决条件是正确设置索引映射,以便将
updatedAt
字段映射为日期时间字段。
只要完成上述操作,下面的查询就应该可以满足您的需求了。
{
"query": {
"match": {
"processId": "<your-process-id>"
}
},
"sort": {
"updatedAt": {
"order": "desc"
}
},
"_size": 1 # to only show the first (most recent) doc
}
我希望这有帮助。如果我误解了请告诉我。