2015-11-04 58 views
0

我Solr模式具有类的字段类型tdatesolr.TrieDateFieldSolr的过滤器每年根据TrieDateField

<field name="timestamp" type="tdate" indexed="true" stored="true" default="NOW"/> 

所以,当我将文档添加到索引中的时间戳字段是这样的:

"timestamp": "2015-11-03T15:52:51.418Z" 

我们筛选当前的所有文档年我向查询添加范围过滤器:

/select?q=*:*&fq=timestamp:[NOW/YEAR TO NOW/YEAR+1YEAR} 

但是如何过滤任何年,比如说2014?

我能想出的唯一的事情是创建一个日期范围从第一个整年跨越到最后毫秒:

/select?q=*%3A*&wt=json&indent=true&fq=timestamp:[2014-01-01T0:00:00.000Z TO 2014-12-31T23:59:59.999Z} 

有没有办法通过刚好路过得到相同的结果在一年中作为一个四位数字符串?

回答

0

经过一番研究,我相信TrieDateField不可能按年度粒度进行筛选,而不是提议的解决方案。你需要一个solr.DateRangeField

但是,可以向查询字符串添加一个参数,告诉Solr如何构想NOW,这是我们要过滤的年份中选择的epoch时间(毫秒)。

&fq=timestamp:[NOW/YEAR TO NOW/YEAR+1YEAR}&NOW=1388534400000 

1388534400000代表午夜一月2014年的第一次,但任何其他epoch时间戳在2014年代表一个时刻将被罚款。

https://cwiki.apache.org/confluence/display/solr/Working+with+Dates