2017-04-25 48 views
0

可以说我有一个日志有关打开吧:Solr的,时间之间搜索,忽略日期

{ 
    opened:  '2013-11-05T00:00:00Z', 
    opened_start: '2013-11-05T12:00:00Z', 
    opened_end: '2013-11-05T14:00:00Z', 
}, 
{ 
    opened:  '2013-15-05T00:00:00Z', 
    opened_start: '2013-15-05T11:00:00Z', 
    opened_end: '2013-15-05T13:00:00Z', 
}, 
{ 
    opened:  '2013-11-05T00:00:00Z', 
    opened_start: '2013-11-05T18:00:00Z', 
    opened_end: '2013-11-05T19:00:00Z', 
}, 
{ 
    opened:  '2013-11-12T00:00:00Z', 
    opened_start: '2013-11-12T02:00:00Z', 
    opened_end: '2013-11-12T14:00:00Z', 
} 

现在我只需要和00​​:00:00之间06:00:00打开吧。我没有对结构的影响,但它基本上建立这样的:

{ 
    opened:  'YMD000', 
    opened_start: 'YMD02:00:00Z', 
    opened_end: 'YMD14:00:00Z', 
} 

编辑:我在想从其减去的:opened_start - 打开,所以我只能得到次:0000-00-00 02:00:00

回答

0

这是问昨天:Solr, search only by time among datetime fields?

最好的和最容易的事是只添加一个字段,并添加适当的格式开幕还有的时候是很容易的可查询,以下任一将工作:

  1. 只是追加所有的时间数字,如:T13:00:00Z ==> 130000
  2. 使用的秒/分钟数自午夜
  3. 使用的秒/分钟数,因为X的即时(如2013-11-01T00 :00:00Z)那就是你绝对的基准时间

现在,如果你不控制客户端,你需要从solr里面添加字段,最简单的方法就是用copyField(见上面的链接),或与UpdateRequestProcessor(更多的工作,不值得)。

1

您可以在XY空间中表示您的酒吧开放范围作为XY空间中的坐标,开放时间为X,关闭时间为Y.然后,您可以使用范围数学来查找Hoss's presentation的重叠。

您可以使用自定义UpdateRequestProcessor链来操纵日期以将其转换为该格式。我想你可能只需要提取一小时,因为这是你的粒度。