Solr---Facet分面查询中时间区间分面的坑

13 篇文章 0 订阅

场景描述:

        上一篇分面查询文章中,我们提到了时间区间分面,但是在使用的过程中,遇到了很坑的事情,那就是时区。

        如果忽视时区,直接设置时间,时间分面查询的结果。很自然的你会设置起始时间都为该月1号00:00:00,但是因为时区的问题,在Solrj处理之后发送给服务器查询时,你可以通过debug看到他的查询条件处理成减了8小时。也就变成了上个月最后一天的16:00:00,如果是31天的月还好,只要到2月就会很复杂。如果是闰年的2月,更会让你头大,导致后面的所有月份分割都会受到影响,就比如3月会因为闰年2月的28号的影响导致分面结果在3月28号就切割,那问题来了,3月29号就算在了下一个区间里,这显然是错误的。

        然而网上大部分的文章遇到该问题并没有人注意到,而只是告诉你们有这个东西,那有什么用,错误的东西拿过来用有意义吗?下面是设置错误的示例,也就是大部分的网友发的样式:

这种结果是错误,一般是没有意义的!

"facet_counts":{  
    "facet_queries":{},  
    "facet_fields":{},  
    "facet_dates":{  
      "birthday":{  
        "2013-12-31T09:15:00Z":0,  
        "2014-01-31T09:15:00Z":0,  
        "2014-02-28T09:15:00Z":0,  
        "2014-03-28T09:15:00Z":0,  
        "2014-04-28T09:15:00Z":0,  
        "2014-05-28T09:15:00Z":0,  
        "2014-06-28T09:15:00Z":0,  
        "2014-07-28T09:15:00Z":0,  
        "2014-08-28T09:15:00Z":0,  
        "2014-09-28T09:15:00Z":1,  
        "2014-10-28T09:15:00Z":5,  
        "2014-11-28T09:15:00Z":3,  
        "gap":"+1MONTH",  
        "start":"2013-12-31T09:15:00Z",  
        "end":"2014-12-28T09:15:00Z"}},  
    "facet_ranges":{}}}  

这样才是正确的结果:

<lst name="facet_ranges">
	<lst name="CREATE_TIME">
		<lst name="counts">
			<int name="2017-02-01T00:00:00Z">4</int>
			<int name="2017-03-01T00:00:00Z">6</int>
			<int name="2017-04-01T00:00:00Z">3</int>
			<int name="2017-05-01T00:00:00Z">4</int>
			<int name="2017-06-01T00:00:00Z">2</int>
			<int name="2017-07-01T00:00:00Z">3</int>
			<int name="2017-08-01T00:00:00Z">11</int>
			<int name="2017-09-01T00:00:00Z">2</int>
		</lst>
		<str name="gap">+1MONTH</str>
		<date name="start">2010-01-01T00:00:00Z</date>
		<date name="end">2018-07-01T00:00:00Z</date>
	</lst>
</lst>

解决办法:

        这是因为时区的问题,我们的时间在处理之后少了8小时,当然也可以去设置配置的时区,也可以去源码中修改时区,我的办法是在给他参数的时候给他加上8小时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值