使用弹性搜索5.文档是数据传输日志(数百万),包含以下相关字段:
查询的理想结果:
唯一会话总数(已解决此问题)
传输的字节总数 - 这是我失败的地方。对于给定的唯一会话号,必须选择序列号最大的文档,并将传输的字节数添加到汇总金额中。
示例文件:
{"session":1,"sequence":0,"bytes":512}
{"session":2,"sequence":0,"bytes":323}
{"session":1,"sequence":1,"bytes":1287}
{"session":1,"sequence":2,"bytes":3456}
{"session":2,"sequence":1,"bytes":800}
{"session":3,"sequence":0,"bytes":200}
{"session":1,"sequence":3,"bytes":4000}
期望的示例结果:
我可以通过类似的查询获得会话总数:
GET /index/type/_search
{
"size":0,
"query" : {
... my query details
},
"aggs" : {
"distinct_sessions" : {
"cardinality" : {
"field" : "session"
}
}
}
}
我无法弄清楚如何从这些独特的会话中获得总和,特别是只需要获得最高序列号的要求。我尝试过使用top_hits,大小为1,降序的变体,但我无法正确使用。
其他人试图做类似的事情吗?
答案 0 :(得分:0)
您在会话中使用terms
聚合的方法是正确的方向。此查询应该为您提供所需内容:
{
"size": 0,
"aggs": {
"sessions": {
"terms": {
"field": "session"
},
"aggs": {
"top_hits": {
"size": 1,
"sort": {
"sequence": "desc"
},
"_source": [
"bytes"
]
}
}
}
}
}
否则,如果您不需要保留所有会话历史记录,则只需使用会话ID作为文档ID,这样您就可以在文档中使用最新的会话数据问题解决了这个问题。