Elasticsearch -检索最后状态为51的文档列表

brccelvz  于 2022-12-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(114)

我在Elasticsearch中有一个索引,里面有这样的文档:

"transactionId" : 5588,
          "clientId" : "1",
          "transactionType" : 1,
          "transactionStatus" : 51,
          "locationId" : 12,
          "images" : [
            {
              "imageId" : 5773,
              "imagePath" : "http://some/url/path",
              "imageType" : "dummyData",
              "ocrRead" : "XYZ999",
              "imageName" : "SOMENUMBERSANDCHARACTERS.jpg",
              "ocrConfidence" : "94.6",
              "ROITopLeftCoordinate" : "839x251",
              "ROIBottomRightCoordinate" : "999x323"
            }
          ],
          "creationTimestamp" : 1669645709130,
          "current" : true,
          "timestamp" : 1669646359686

这是一个“只添加”类型的堆栈,其中的记录永远不会更新。.-添加具有“transactionStatus”的新记录:10 .-交易ID改变状态,然后,为相同的交易ID添加具有“交易状态”的新记录:51等等。
我想要实现的是获得一个包含10条记录的列表,这些记录的最后状态是51,但我无法编写正确的查询。
以下是我尝试过的方法:

{ "size": 10, 
    "query": {
      "match_all": {}
    },
    "collapse": {
      "field": "transactionId",
      "inner_hits": {
        "name": "most_recent",
        "size": 1,
        "sort": [{"timestamp": "desc"}]
      }
    },
    "post_filter": {
      "term": {
        "transactionStatus": "51"
      }
    }
  }

如果我将post_filter术语上的“transactionStatus”:51更改为10,则会得到最后一条记录不是10的transactionID记录。
我不知道我是否能用一种恰当的方式来解释。我为我的英语道歉,这不是我的母语。

mkh04yzy

mkh04yzy1#

GET test_status/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "transactionStatus": 51
          }
        }
      ]
    }
  },
  "sort": [
    {
      "timestamp": {
        "order": "desc"
      }
    }
  ]
}

这一个将过滤,然后按时间戳排序。让我知道是否有遗漏的东西。

相关问题