Sam*_*rma 4 nosql elasticsearch elasticsearch-plugin pyelasticsearch spring-data-elasticsearch
我有以下类型的文件:
[{"msg":"hello", date: "some-date"},{"msg":"hi!", date: "some-date"}, ...
Run Code Online (Sandbox Code Playgroud)
我想按星期几计算文档数。例如,周一发送了 x 条消息,周二发送了 y 条消息,依此类推。
我已经将 date_histogram 与聚合一起使用,但它每天都会返回文档。它确实返回了我的一天,但是说“星期三,22”和“星期三,29”作为单独的聚合文档返回。
这与Elasticsearch有点相关- 按星期几和小时分组,但该问题没有答案,所以我重新发布。根据那里的建议,它要求我对 key_as_string 进行术语聚合,但我需要为每个对象添加 doc_count,而不仅仅是计算术语。我也不知道如何在嵌套聚合中使用 key_as_string。
这是我尝试过的:
"aggs" : {
"posts_over_days" : {
"date_histogram" : {
"field" : "created_time",
"interval": "day",
"format": "E"
}
}
Run Code Online (Sandbox Code Playgroud)
从我的回答在这里重新发布:https : //stackoverflow.com/a/31851896/6247
这是否有帮助:
"aggregations": {
"timeslice": {
"histogram": {
"script": "doc['timestamp'].value.getHourOfDay()",
"interval": 1,
"min_doc_count": 0,
"extended_bounds": {
"min": 0,
"max": 23
},
"order": {
"_key": "desc"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好,因为它还将包括任何结果为零的小时,并且它将结果扩展到涵盖整个 24 小时(由于extended_bounds)。
您可以使用“getDayOfWeek”、“getHourOfDay”、...(更多信息请参见“Joda time”)。
这对几个小时来说很好,但对于几天/几个月,它会给你一个数字而不是月份名称。要解决此问题,您可以将时间段作为字符串获取 -但是,这不适用于扩展边界方法,因此您可能会得到空结果(即 [Mon, Tues, Fri, Sun])。
如果你想要,它在这里:
"aggregations": {
"dayOfWeek": {
"terms": {
"script": "doc['timestamp'].value.getDayOfWeek().getAsText()",
"order": {
"_term": "asc"
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使这对您没有帮助,但希望其他人会找到它并从中受益。
同类问题已在该线程中得到解决。
根据您的问题调整解决方案,我们需要编写一个脚本将日期转换为一天中的小时和星期几:
Date date = new Date(doc['created_time'].value) ;
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('EEE, HH');
format.format(date)
Run Code Online (Sandbox Code Playgroud)
并在查询中使用它:
{
"aggs": {
"perWeekDay": {
"terms": {
"script": "Date date = new Date(doc['created_time'].value) ;java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('EEE, HH');format.format(date)"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12043 次 |
| 最近记录: |