java - Elasticsearch 分组并提取具有最大时间戳的文档
问题描述
我正在使用 Elasticsearch 6.5。我正在寻找具有某些过滤条件的文档(工作正常),然后我只需要获取具有 MAX 时间戳的文档(文档中的字段)。
基本上,当我使用下面的有效负载搜索索引时,我得到如下所示的数据(仅显示重要字段,数据有其他字段和内容)
{
"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 条消息或文档,具有 3 个以上的 Id。其中,我只需要那些时间戳为 latest 的文档。
我正在尝试进行一些聚合,但没有帮助。应该怎么做才能获得唯一的最新文档?
我试过这样的事情:
{
"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": []
}
}
这里缺少什么?
解决方案
难道不应该
"aggs": {
"timeStamp": {
"max": {
"field": "field1.timestamp"
}
}
}
代替
"aggs": {
"timeStamp": {
"max": {
"field": "field1.Id"
}
}
}
推荐阅读
- machine-learning - 谷歌云机器学习引擎预测时在哪里放置“input.json 文件”?
- c# - 如何在 C# 函数中返回 ADO.NET 中的计数值?
- python - Telethon - 检索用户信息时出错
- sed - 在 vi/sed 中更改模式之间的字符
- laravel - Laravel BelongtoMany 关系保存与两个模型相关的额外列
- apache-spark - 由 OneHotEncoder 表示的 Spark 结构体
- java - Spring Cloud Config 中属性的加载优先级是什么?
- javascript - FlatList 中的替代颜色
- wordpress - Wordpress 自定义帖子类型到购物车不更新它
- ms-word - 如何在 Word 文档的第二页上放置图片 VB6