如何从组中获取一份已排序的文档?

问题描述 投票:0回答:1

我有很多文件,像这样:

    "_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
提供最新日期时间。

是否可以在一个查询中执行?

elasticsearch opensearch
1个回答
0
投票

嗨,Вячеслав Чернышов,

如果我正确理解您的问题,您希望在查询中传递

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
}

我希望这有帮助。如果我误解了请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.