从 ElasticSearch 获取最后一个文档
Get last document from ElasticSearch
所以我有一个弹性搜索索引,我正在向它发送带有时间戳的文档。我想知道是否有一种方法可以根据时间戳提取最后一个文档。 IE。说弹性给我最后一次的文档。
谢谢。
是的,您可以简单地请求一个文档 (size: 1
) 并按时间戳递减排序
POST index/_search
{
"size": 1,
"sort": { "timestamp": "desc"},
"query": {
"match_all": {}
}
}
使用 java 高级 REST 客户端从 elasticsearch 获取最后一个文档
The given solution is in Scala language:
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)
一个完整的 curl
命令看起来像这样。
包括从 netrc
读取 user/password 和使用 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 请求学分转到@Val
的答案
文件位置和索引名称当然必须适应您的用例。此外,您必须知道要排序的时间戳字段的名称。通常是@timestamp
(与@
)。
所以我有一个弹性搜索索引,我正在向它发送带有时间戳的文档。我想知道是否有一种方法可以根据时间戳提取最后一个文档。 IE。说弹性给我最后一次的文档。
谢谢。
是的,您可以简单地请求一个文档 (size: 1
) 并按时间戳递减排序
POST index/_search
{
"size": 1,
"sort": { "timestamp": "desc"},
"query": {
"match_all": {}
}
}
使用 java 高级 REST 客户端从 elasticsearch 获取最后一个文档
The given solution is in Scala language:
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)
一个完整的 curl
命令看起来像这样。
包括从 netrc
读取 user/password 和使用 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 请求学分转到@Val
的答案文件位置和索引名称当然必须适应您的用例。此外,您必须知道要排序的时间戳字段的名称。通常是@timestamp
(与@
)。