繁体   English   中英

Elasticsearch获取给定字段的最后一个文档(如果存在)

[英]Elasticsearch GET the last document for a given field if it exists

我有一个简短的问题似乎很简单,但到目前为止我找不到任何答案。

我想在Elasticsearch节点上检索给日期字段的最后一个文档。 但我想要最后一个文档,仅适用于包含特定字段的文档。

例如,假设我想获得包含字段“ promotionCode ”的最后一次购买:

查询:

http://elasticsearch:9200/store1/purchase/_search?q=vendor:Marie&size=1&sort=date:desc

其中store1是我的索引, 购买文档类型。

现在假设我在ElasticSearch中有这两个文档:

"hits": [
      {
        "_index": "store1",
        "_type": "purchase",
        "_id": "1",
        "_score": 1,
        "_source": {
            "date": "2016-03-16T12:53:16.000Z",
            "vendor": "Marie",
            "promotionCode": "XYZ123"
        }
      },
      {
        "_index": "store1",
        "_type": "purchase",
        "_id": "2",
        "_score": 1,
        "_source": {
            "date": "2016-03-18T12:53:16.000Z",
            "vendor": "Marie"
        }
      }
]

上面的查询将检索id为2的文档,但我的结果中不会有任何字段“ promotionCode ”。

如果我想获取包含特定字段的最后一个文档,我该怎么办?

我探索了“字段”过滤器,但是如果字段没有包含它只发回空文档,我读到了关于源过滤但不确定它正在做我想要的...

非常感谢任何暗示!

你可以尝试这个查询:

{
    "query": {
        "term": { "vendor": "Marie" }
    },
    "filter": {
        "bool": {
            "must_not": { "missing": { "field": "promotionCode" } }
        }
    },
    "sort": { "date" : "desc" },
    "size": 1
}

您可以使用存在查询

GET /store1/purchase/_search?q=vendor:Marie&size=1&sort=date:desc
{

       "query": {
    "exists" : {
        "field" : "promotionCode"
      }
   }

}

希望能帮助到你!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM