当前位置: 首页 > 知识库问答 >
问题:

Date_histogram聚合返回错误结果

淳于思淼
2023-03-14

我必须创建聚合,计算日期范围中包含的文档数量。我的查询如下所示:

{  
   "query":{  
      "range":{  
         "doc.createdTime":{  
            "gte":1483228800000,
            "lte":1485907199999
         }
      }
   },
   "size":0,
   "aggs":{  
      "by_day":{  
         "histogram":{  
            "field":"doc.createdTime",
            "interval":"604800000ms",
            "format":"yyyy-MM-dd'T'HH:mm:ssZZ",
            "min_doc_count":0,
            "extended_bounds":{  
               "min":1483228800000,
               "max":1485907199999
            }
         }
      }
   }
}

间隔:604800000等于7天。

结果,我重新强调了这些:

"aggregations": {
    "by_day": {
      "buckets": [
        {
          "key_as_string": "2016-12-29T00:00:00+00:00",
          "key": 1482969600000,
          "doc_count": 0
        },
        {
          "key_as_string": "2017-01-05T00:00:00+00:00",
          "key": 1483574400000,
          "doc_count": 603
        },
        {
          "key_as_string": "2017-01-12T00:00:00+00:00",
          "key": 1484179200000,
          "doc_count": 3414
        },
        {
          "key_as_string": "2017-01-19T00:00:00+00:00",
          "key": 1484784000000,
          "doc_count": 71551
        },
        {
          "key_as_string": "2017-01-26T00:00:00+00:00",
          "key": 1485388800000,
          "doc_count": 105652
        }
      ]
    }
  }

您可以要求我的buckets从29/12/2016开始,但作为范围查询,不包括此日期。我希望我的桶应该从01/01/2017开始,正如我在范围查询中指出的那样。此问题仅发生在间隔天数大于1的查询中。在任何其他间隔的情况下,它工作得很好。我试了一天,几个月和几个小时,效果很好。我也尝试使用过滤的AGG,然后只使用date_histogram。结果是一样的。我使用的是Elasticsearch 2.2.0版本。

问题是我如何强制date_histogram从我需要的日期开始?

共有1个答案

孙正业
2023-03-14

尝试用给定公式计算的值添加偏移量参数:

value=start_date_in_ms%week_in_ms=1483228800000%604800000=259200000

{
  "query": {
    "range": {
      "doc.createdTime": {
        "gte": 1483228800000,
        "lte": 1485907199999
      }
    }
  },
  "size": 0,
  "aggs": {
    "by_day": {
      "date_histogram": {
        "field": "doc.createdTime",
        "interval": "604800000ms",
        "offset": "259200000ms",
        "format": "yyyy-MM-dd'T'HH:mm:ssZZ",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": 1483228800000,
          "max": 1485907199999
        }
      }
    }
  }
}
 类似资料:
  • 我正在使用Elasticsearch bucket聚合。我有一组文档,每个文档都有一个类别字段,它是一个数组。我需要获得每个类别的数量以及搜索结果。但目前,我得到了错误的doc\u计数。 这是我的聚合查询 } 下面是我得到的错误doc\u计数的结果。

  • 我是Java8流api的新手,我正在寻求一种解决方案,以运行我的对象列表并聚合某些属性,从而最终能够获得该属性类型和所有聚合结果的新列表。 例如,我的列表中有10个person对象,我想要一个基于第一人称年龄的所有年龄差异的列表 在执行流魔术之后,结果应该是int类型的,并且看起来如下所示

  • 问题内容: 它应该返回1000,但是为什么返回5? 问题答案: 是。如果你用它乘,它会溢出类型(因为这的最大值可容纳是比少了很多),你会得到的。 然后,将结果除以,您将得到。 为了解决此问题,您需要明确指定乘法的结果将是-这是因为Java中的所有数字运算符都会产生整数,除非明确指示要产生其他数字类型。 只需在一些操作数上附加a 就足够了:

  • 问题内容: 当我比较具有相同下划线字符串的两个StringBuilder对象时,即使value应该为true也会返回。 问题答案: 这是因为不会覆盖类中的方法。 您将必须将两个对象都转换为,然后进行比较 这将为您提供正确的结果。显然,您必须注意 null 检查等。 根据合同,如果覆盖equals,则也必须覆盖它们,但是由于可变,因此其值的任何更改都会影响对象的哈希码。如果用作键,可能会导致存储的值

  • 我有一个名为results的集合,其中每个文档都有一个标记(唯一)和一个嵌入文档(服务)列表。 样本: 我想使用mongo模板(spring boot)提取一个基于令牌和服务id的服务。下面是一个代码片段: 服务级别: 上面的代码执行此查询: 方法返回空Service对象! 为了获得服务对象,我的聚合中是否有任何更改要做?

  • 我试图用这个php脚本创建一个更改密码页面。我希望能够告诉用户他们是否输入了正确的用户名和密码,以便进行更改。当我检查行时,无论它是否返回行,我总是得到以下错误: 警告:mysqli_num_rows()要求参数1为mysqli_结果,给定布尔值 这是我的代码: 注意:我确实在手之前建立了一个连接,只是似乎没有必要在这里进行连接。此外,如果我输入了正确的信息,它将根据需要更改密码,但仍会显示错误消