我正在使用Elasticsearch 6.5。我正在寻找具有某种过滤条件的文档(可以正常工作),然后只需要获取具有最大时间戳记的文档(文档中的字段)。
基本上,当我使用下面的有效负载搜索索引时,我得到的数据如下所示(仅显示重要字段,数据具有其他字段和内容)
{
"query": {
"bool": {
"must": [
{
"match": { "myfield.date" : "2019-07-02" }
},
{
"match": { "myfield.data" : "ABC" }
},
{
"bool": {
"should": [
{
"regexp": { "myOtherFieldId": "myregex1" }
},
{
"regexp": { "myOtherFieldId": "myregex2" }
}
]
}
}
]
}
}
}
基本上,我正在获取以下文档。
date, book, id, timestamp
2019-07-02, ABC, PQR_20190703130000_1234, 2019-07-03 13:01:00
2019-07-02, ABC, PQR_20190703140000_234, 2019-07-03 14:01:00
2019-07-02, ABC, PQR_20190704100000_0199, 2019-07-04 10:01:00
总共约有1200条消息或文档,其中ID超过3。 其中,我只需要那些时间戳为最新的文档。
我正在尝试进行一些汇总,但没有帮助。 要获取唯一的最新文档应该怎么做?
我尝试过这样的事情:
{
"query": {
"bool": {
"must": [
{
"match": { "myfield.date" : "2019-07-02" }
},
{
"match": { "myfield.data" : "ABC" }
},
{
"bool": {
"should": [
{
"regexp": { "myOtherFieldId": "myregex1" }
},
{
"regexp": { "myOtherFieldId": "myregex2" }
}
]
}
}
]
}
},
"aggs": {
"group_by_id" : {
"terms": {
"field": "field1.Id"
},
"aggs": {
"timeStamp": {
"max": {
"field": "field1.Id"
}
}
}
},
"max_timestamp": {
"max_bucket": {
"buckets_path": "group_by_id>timeStamp"
}
}
},
"size": "10000"
}
在这里,我仍在获取所有文档。 请注意,映射显示的是field1.Id是关键字。
"Id":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}
检索到的数据显示MAX值为NULL。
"aggregations": {
"group_by_id": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "PQR_20190703130000_1234",
"doc_count": 947,
"timeStamp": {
"value": null
}
},
{
"key": "PQR_20190703140000_234",
"doc_count": 947,
"timeStamp": {
"value": null
}
},
{
"key": "PQR_20190704100000_0199",
"doc_count": 947,
"timeStamp": {
"value": null
}
}
]
},
"max_timestamp": {
"value": null,
"keys": []
}
}
这里缺少什么?
答案 0 :(得分:0)
应该不是
"aggs": {
"timeStamp": {
"max": {
"field": "field1.timestamp"
}
}
}
代替
"aggs": {
"timeStamp": {
"max": {
"field": "field1.Id"
}
}
}