Solr json.facet范围查询与月份分组

时间:2016-10-06 09:04:52

标签: solr

我有一个solr查询(Solr版本6.0.2),它对每天的销售进行分组和汇总。以下参数一切都很好:

json.facet=sales:{
      type:range,
      field:date_add,
      start:'2016-05-31T22:00:00Z',
      end:'2016-10-31T22:59:59Z',
      gap:'+1DAY',
      facet:{
         ordersSum:'sum(sales_value)'
      }
   }

start 参数中指定的小时22:00:00是因为时区,因为Solr以UTC格式保留日期,而我的应用程序在欧洲/华沙时区工作)

有了这个,我就在开始结束参数之间指定的日期获得了不错的销售价值。但是现在我想做同样的事情,但是以月为基础,所以我想要7月7月的销售[...] 10月。

我已经发现,可以将间隙参数更改为'+ 1MONTH',但这些值不一致,因为几个月不相等:

"val":"2016-05-31T22:00:00Z",
"val":"2016-06-30T22:00:00Z",
"val":"2016-07-30T22:00:00Z",
"val":"2016-08-30T22:00:00Z",
"val":"2016-09-30T22:00:00Z",

可以看出,日期默认为第一个出现的较低天数(即7月和agust有31天)。同样可以通过将 start 参数操作为:

来解决问题
2016-05-31T22:00:00Z/MONTH

/ MONTH 后缀告诉Solr默认为午夜的第一天。然后提取日期看起来不错:

"val":"2016-06-01T00:00:00Z",
"val":"2016-07-01T00:00:00Z",
"val":"2016-08-01T00:00:00Z",
"val":"2016-09-01T00:00:00Z",
"val":"2016-10-01T00:00:00Z",

但是,给定的日期值对于UTC时区是正确的。 Solr有没有办法正确添加月份,或为结果设置时区?

1 个答案:

答案 0 :(得分:1)

好的,我想我已经明白了。通过向查询添加其他参数,可以为Solr查询全局设置时区:

&安培; TZ =欧洲/华沙

在我的情况下,结果如下:

"val":"2015-08-31T22:00:00Z",
"val":"2015-09-30T22:00:00Z",
"val":"2015-10-31T23:00:00Z",
"val":"2015-11-30T23:00:00Z",

(我已经稍微更改了开始 / 结束参数,以显示如何保存夏令时)。此外,在这种情况下不需要 / MONTH 后缀,它只会有助于保持正确的开始时间。