1

2010 年から 2015 年までのインデックスにデータがあります。

次のコードを使用して、2010 年から 2015 年まで毎年集計された名前の詳細を取得しました。期待どおりに動作します。

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 日までのデータを取得したいとします。

4

2 に答える 2

4

このようなフィルターでfilter集計を使用してみてください。2 月 15 日は 46 日目、4 月 15 日は 105 日目であることに注意してください (もちろん閏年は例外ですが、これは解決策を示しています)。script

は、(任意の年の) 2 月 15 日から 4 月 15 日までのscriptドキュメントを受け取り、適切な年のバケットに発送します。最後に、集計により、カウントが名で分割されます。logdatedate_histogramterms

{
  "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"
              }
            }
          }
        }
      }
    }
  }
}
于 2015-05-23T04:22:13.057 に答える
2

以下のような範囲の日付範囲集計:

{
    "aggs": {
        "range": {
            "date_range": {
                "field": "logdate",
                "format": "YYYYMMDD",
                "ranges": [
                    {
                        "from": "20150201"
                    },
                    {
                        "to": "20150430"
                    }
                ]
            },
            "aggs": {
                "count_by_firstname": {
                    "terms": {
                        "field": "profile.firstname"
                    }
                }
            }
        }
    }
}
于 2015-05-22T13:56:42.203 に答える