如何在elasticsearch中基于每年的特定日期聚合字段?

bn31dyow  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(490)

我的指数里有2010年到2015年的数据。
我使用了下面的代码来获取2010年到2015年期间每年汇总的名字详细信息,它按预期工作

  1. POST profile/_search
  2. {
  3. "size": "0",
  4. "aggs": {
  5. "count_by_year": {
  6. "date_histogram": {
  7. "field": "logdate",
  8. "interval": "year",
  9. "format": "yyyy"
  10. },
  11. "aggs": {
  12. "count_by_firstname": {
  13. "terms": {
  14. "field": "profile.firstname"
  15. }
  16. }
  17. }
  18. }
  19. }
  20. }

如何根据每年的特定日期汇总数据。
例如,我想检索每年2月15日到4月15日的数据。

qkf9rpyu

qkf9rpyu1#

你可以试着用 filter 用一个 script 像这样过滤。请注意,2月15日是一年中的第46天,4月15日是一年中的第105天(当然闰年除外,但这说明了一个解决方案)。
这个 script 会把任何文件 logdate 2月15日至4月15日(任何一年),然后 date_histogram 会在适当的年份把它们送到桶里。最后是 terms 聚合按名字拆分计数。

  1. {
  2. "size": "0",
  3. "aggs": {
  4. "specific_period": {
  5. "filter": {
  6. "script": {
  7. "script": "doc.logdate.date.dayOfYear >= 46 && doc.logdate.date.dayOfYear <= 105"
  8. }
  9. },
  10. "aggs": {
  11. "byyear": {
  12. "date_histogram": {
  13. "field": "logdate",
  14. "interval": "year",
  15. "format": "yyyy"
  16. },
  17. "aggs": {
  18. "count_by_firstname": {
  19. "terms": {
  20. "field": "profile.firstname"
  21. }
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }
展开查看全部
sqougxex

sqougxex2#

日期范围聚合,范围如下:

  1. {
  2. "aggs": {
  3. "range": {
  4. "date_range": {
  5. "field": "logdate",
  6. "format": "YYYYMMDD",
  7. "ranges": [
  8. {
  9. "from": "20150201"
  10. },
  11. {
  12. "to": "20150430"
  13. }
  14. ]
  15. },
  16. "aggs": {
  17. "count_by_firstname": {
  18. "terms": {
  19. "field": "profile.firstname"
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
展开查看全部

相关问题