【问题标题】:Get last document from ElasticSearch从 ElasticSearch 获取最后一个文档
【发布时间】:2016-06-27 20:17:53
【问题描述】:

所以我有一个弹性搜索索引,我正在向它发送附有时间戳的文档。我想知道是否有办法根据时间戳提取最后一个文档。 IE。说弹性给我最后一次的文档。

谢谢。

【问题讨论】:

    标签: elasticsearch sense


    【解决方案1】:

    是的,您只需请求一个文档 (size: 1) 并按时间戳递减排序

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

    【讨论】:

    • 嘿,谢谢你的提示。我在其他地方找到了答案: GET index-*/type/_search { "query": { "match_all": {} }, "size": 1, "sort": [ { "timestamp": { "order": "desc" } } ] } 我想知道在使用 PHP API 时是否有办法做到这一点。
    • 是的,see this
    • @devmage 随时根据您的确切需求创建一个新问题
    • 我已经创建了一个,如果你能在那里分享你的意见会很棒
    【解决方案2】:

    使用 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)
    

    【讨论】:

    • 这对我有用,谢谢!一个问题是,如果您正在指定一个字段值。如果我只想根据创建的日期字段取回最后 5 个文档怎么办?
    【解决方案3】:

    一个完整的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 请求来自@Val 的答案

    文件位置和索引名称当然必须适应您的用例。此外,您必须知道要排序的时间戳字段的名称。 通常@timestamp(带有@)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      相关资源
      最近更新 更多