所以我有一个弹性的搜索索引,我发送文档到它附有一个时间戳。我想知道是否有一种方法可以根据时间戳提取最后一个文档。也就是说,弹性给予我的文件与最后一次。谢谢
u2nhd7ah1#
是的,您可以简单地请求一个文档(size: 1),并按时间戳降序排序
size: 1
POST index/_search { "size": 1, "sort": { "timestamp": "desc"}, "query": { "match_all": {} } }
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)
qybjjes13#
完整的curl命令如下所示。包括从netrc阅读用户/密码和使用cacert的安全选项。
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(与@)。
@timestamp
@
42fyovps4#
您也可以使用请求的信息作为参数进行调用:
POST /index/_search?size=1&sort=timestamp:desc
4条答案
按热度按时间u2nhd7ah1#
是的,您可以简单地请求一个文档(
size: 1
),并按时间戳降序排序uyhoqukh2#
使用java高级REST客户端从elasticsearch获取最后一个文档
给出的解决方案是用Scala语言编写的:
qybjjes13#
完整的
curl
命令如下所示。包括从netrc
阅读用户/密码和使用cacert
的安全选项。POST请求信用转到来自@瓦尔的答案
文件位置和索引名称当然必须适应您的用例。此外,您必须知道要排序的时间戳字段的名称。它通常是
@timestamp
(与@
)。42fyovps4#
您也可以使用请求的信息作为参数进行调用: