我的Solr架构具有类tdate
solr.TrieDateField
<field name="timestamp" type="tdate" indexed="true" stored="true" default="NOW"/>
因此,当我向索引添加文档时,timestamp字段如下所示:
"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 :(得分:0)
经过一些研究后,我认为除了建议的解决方案之外,TrieDateField不可能按年度粒度进行过滤。你需要solr.DateRangeField
。
但是,可以在查询字符串中添加一个参数,告诉Solr如何设想NOW
,这是我们想要过滤的年份中选择的epoch
时间(毫秒)。 / p>
&fq=timestamp:[NOW/YEAR TO NOW/YEAR+1YEAR}&NOW=1388534400000
1388534400000
代表2014年1月1日午夜。但2014年代表片刻的任何其他epoch
时间戳都可以。
https://cwiki.apache.org/confluence/display/solr/Working+with+Dates