从ElasticSearch获取最后一个文档

xe55xuns  于 2023-06-21  发布在  ElasticSearch
关注(0)|答案(4)|浏览(121)

所以我有一个弹性的搜索索引,我发送文档到它附有一个时间戳。我想知道是否有一种方法可以根据时间戳提取最后一个文档。也就是说,弹性给予我的文件与最后一次。
谢谢

u2nhd7ah

u2nhd7ah1#

是的,您可以简单地请求一个文档(size: 1),并按时间戳降序排序

POST index/_search
{
   "size": 1,
   "sort": { "timestamp": "desc"},
   "query": {
      "match_all": {}
   }
}
uyhoqukh

uyhoqukh2#

使用java高级REST客户端从elasticsearch获取最后一个文档

给出的解决方案是用Scala语言编写的:

import org.elasticsearch.action.search.{SearchRequest, SearchResponse}
import org.elasticsearch.index.query.QueryBuilders
import org.elasticsearch.search.builder.SearchSourceBuilder
import org.elasticsearch.search.sort.SortOrder

val searchRequest = new SearchRequest("index")
val searchSourceBuilder = new SearchSourceBuilder
val queryBuilder = QueryBuilders.boolQuery()

queryBuilder.must(QueryBuilders.termQuery("field.keyword", "field value"))

searchSourceBuilder.query(queryBuilder)
                   .sort("timestamp", SortOrder.DESC)
                   .size(1)
searchRequest.source(searchSourceBuilder)
val searchResponse = high_level_client.search(searchRequest)
qybjjes1

qybjjes13#

完整的curl命令如下所示。包括从netrc阅读用户/密码和使用cacert的安全选项。

curl -s \
     --netrc-file ~/.netrc \
     --cacert ~/ca/ca.crt \
     -H 'Content-Type: application/json' \
     'https://localhost:9200/logstash-*/_search?pretty' \
     -XPOST \
     -d '
         {
            "size": 1,
            "sort": { "@timestamp": "desc"},
            "query": {
               "match_all": {}
            }
        }'

POST请求信用转到来自@瓦尔的答案
文件位置和索引名称当然必须适应您的用例。此外,您必须知道要排序的时间戳字段的名称。它通常是@timestamp(与@)。

42fyovps

42fyovps4#

您也可以使用请求的信息作为参数进行调用:

POST /index/_search?size=1&sort=timestamp:desc

相关问题