elasticsearch 如何在elasticsearch中根据每年的特定日期聚合字段?
我的索引中有2010年到2015年的数据 从2010年到2015年,我每年都使用下面的代码来获取汇总的名字详细信息,它的工作原理与预期一致elasticsearch 如何在elasticsearch中根据每年的特定日期聚合字段?,elasticsearch,kibana,elastic-stack,elasticsearch,Kibana,Elastic Stack,我的索引中有2010年到2015年的数据 从2010年到2015年,我每年都使用下面的代码来获取汇总的名字详细信息,它的工作原理与预期一致 POST profile/_search { "size": "0", "aggs": { "count_by_year": { "date_histogram": { "field": "logdate", "interval": "year", "format": "yyyy"
POST profile/_search
{
"size": "0",
"aggs": {
"count_by_year": {
"date_histogram": {
"field": "logdate",
"interval": "year",
"format": "yyyy"
},
"aggs": {
"count_by_firstname": {
"terms": {
"field": "profile.firstname"
}
}
}
}
}
}
如何根据每年的特定日期汇总我的数据
例如,我希望检索每年2月15日至4月15日的数据。聚合范围如下:
{
"aggs": {
"range": {
"date_range": {
"field": "logdate",
"format": "YYYYMMDD",
"ranges": [
{
"from": "20150201"
},
{
"to": "20150430"
}
]
},
"aggs": {
"count_by_firstname": {
"terms": {
"field": "profile.firstname"
}
}
}
}
}
}
聚合范围如下:
{
"aggs": {
"range": {
"date_range": {
"field": "logdate",
"format": "YYYYMMDD",
"ranges": [
{
"from": "20150201"
},
{
"to": "20150430"
}
]
},
"aggs": {
"count_by_firstname": {
"terms": {
"field": "profile.firstname"
}
}
}
}
}
}
你可以试着用a和这样的a。请注意,2月15日是一年中的46天,4月15日是一年中的105天(当然闰年除外,但这说明了一个解决方案)
脚本
将在2月15日至4月15日(任何年份)之间获取任何带有日志日期的文档,然后日期直方图
将在适当的年份中发送这些文档。最后,terms
聚合按名字分割计数
{
"size": "0",
"aggs": {
"specific_period": {
"filter": {
"script": {
"script": "doc.logdate.date.dayOfYear >= 46 && doc.logdate.date.dayOfYear <= 105"
}
},
"aggs": {
"byyear": {
"date_histogram": {
"field": "logdate",
"interval": "year",
"format": "yyyy"
},
"aggs": {
"count_by_firstname": {
"terms": {
"field": "profile.firstname"
}
}
}
}
}
}
}
}
{
“大小”:“0”,
“aggs”:{
“特定时期”:{
“过滤器”:{
“脚本”:{
“脚本”:“doc.logdate.date.dayOfYear>=46&&doc.logdate.date.dayOfYear您可以尝试将a与这样的a一起使用。请注意,2月15日是一年中的46天,4月15日是一年中的105天(当然闰年除外,但这说明了一种解决方案)
脚本
将获取在2月15日至4月15日(任何一年)之间具有日志日期
的任何文档,然后日期柱状图
将它们分配到适当的年份桶中。最后,术语
聚合按名字分割计数
{
"size": "0",
"aggs": {
"specific_period": {
"filter": {
"script": {
"script": "doc.logdate.date.dayOfYear >= 46 && doc.logdate.date.dayOfYear <= 105"
}
},
"aggs": {
"byyear": {
"date_histogram": {
"field": "logdate",
"interval": "year",
"format": "yyyy"
},
"aggs": {
"count_by_firstname": {
"terms": {
"field": "profile.firstname"
}
}
}
}
}
}
}
}
{
“大小”:“0”,
“aggs”:{
“特定时期”:{
“过滤器”:{
“脚本”:{
“脚本”:doc.logdate.date.dayOfYear>=46&&doc.logdate.date.dayOfYear是logdate
ISODATE格式?日期是yyyyymmdd格式。示例:20141231是否仍要按年份进行聚合,但将结果限制为每年的一部分?还是要按天、周、月进行聚合?按年份和特定的日期和月进行聚合logdate
ISODATE格式?日期为YYYYMMDD格式。例如:20141231是否仍要按年份进行聚合,但将结果限制为每年的一部分?还是要按天、周、月进行聚合?按年、按特定日期和月份进行聚合?我认为这不会搜索每年的特定日期范围。仅此而已搜索一个特定范围。据我所知,OP的问题是针对一个“仅”以日和月为范围的查询。我有一个类似的问题,我不认为它在每年搜索一个特定的日期范围。这只搜索一个特定范围。据我所知,OP的问题是针对一个“仅”的查询以日和月为一个范围。我有一个类似的问题,如果可能的话,请给我提供一些固定的解决方案。是否可以根据月的日期进行聚合?是的,只需使用doc.logdate.date.dayOfMonth
而不使用脚本就可以实现这一点吗?如果可能,请给我一些固定的解决方案。可能吗要基于月日进行聚合吗?是的,只需使用doc.logdate.date.dayOfMonth
而不是