【问题标题】:ElasticSearch Date Histogram IntervalElasticSearch 日期直方图区间
【发布时间】:2016-12-14 16:23:33
【问题描述】:

为什么我的查询包含从日期到日期的过滤器,但是当使用日期直方图聚合时,从日期到日期范围(有时)开始间隔。 我的查询过滤器从2015-01-012015-01-31,间隔开始日期必须在2015-01-012015-01-31 的范围内,但开始日期我的结果是2014-12-31。如何在2015-01-012015-01-31 范围内定义开始日期。

我的完整查询:

{
  "size": 0,
  "aggs": {
    "cluster": {
      "terms": {
        "field": "cluster"
      },
      "aggs": {
        "histogram_Log": {
          "date_histogram": {
            "field": "actionTime",
            "interval": "1800m",
            "format": "dd/MM/YYYY hh:mm:ss"
          },
          "aggs": {
            "typelog": {
              "terms": {
                "field": "typeLog"
              }
            }
          }
        }
      }
    }
  },
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "bool": {
                "must": [
                  {
                    "match_all": {}
                  },
                  {
                    "range": {
                      "actionTime": {
                        "lte": "2015-01-31T00:00:00.000",
                        "gte": "2015-01-01T00:00:00.000"
                      }
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

【问题讨论】:

    标签: elasticsearch sense


    【解决方案1】:

    请改用HH 的以下格式。您使用的是 12 小时制而不是 24 小时制的 hh

       "format": "dd/MM/YYYY HH:mm:ss"
    

    更新

    鉴于您的间隔为1800m,您还需要指定此偏移量

       "offset": "1d"
    

    【讨论】:

    • 它只影响数据格式结果。我需要从日期到日期范围内的开始日期间隔,如果我更改一年的范围(2015-01-01 到 2015-12-31),开始日期间隔将为 2014-12-21。
    • 好的,从您给出的示例中并不清楚,但我仍然很难相信您得到的日期超出了指定范围。你有30h(即1800m)间隔的任何原因?
    • 我需要从日期到日期范围内的 24 天(24 间隔)
    • 您能否按照我的建议修复格式,然后再次显示与您的期望不符的查询示例和结果?
    • 我不知道为什么如果我选择 n 天整除 24,天的所有间隔部分都将在 fromdate todate 范围内,否则,间隔开始日期超出范围。
    【解决方案2】:

    您在结果中突出显示的时间戳不是文档的时间戳,而是您的第一个存储桶的开始。

    您的第一个存储桶从 31/12/2014 00:00:00 到 01/01/2015 06:00:00。

    您已过滤查询以仅返回时间戳晚于 01/01/2015 00:00:00 的文档,但由于那是在 01/01/2015 06:00:00 之前,因此您的文档属于您的第一个桶。

    如果您还想强制您的存储桶从 01/01/2015 00:00:00 开始,那么您需要在直方图聚合中将其指定为 extended_bounds.min

    【讨论】:

    • 谢谢福勒,我忘了指定时区
    【解决方案3】:

    谢谢你的问题代码。我解决了。我从你的模板代码中删除了一些代码。所以我做了这个代码来工作。这是“date_histogram => date range”的非常简单的模板是好的

           var queryOptions = 
                {
           "aggs": {
             "all_hours": {
                 "date_histogram": {
                   "field": "stamp",
                   "interval": "1d",
                   "format": "dd/MM/YYYY"
                             }
                         }
                 },
                "query": {
           "filtered": {
           "filter": {
               "bool": {
                 "must": [
                   {
                     "bool": {
                       "must": [
                         {
                           "match_all": {}
                         },
                         {
                           "range": {
                             "stamp": {
                               "lte": "2016-10-20",
                               "gte": "2016-05-01"
                             }
                           }
                         }
                       ]
                     }
                   }
                 ]
               }
             }
          }
       }
      }
    `
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多