Solr在TrieDateField上按年过滤

时间:2015-11-04 11:11:48

标签: solr

我的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}

有没有办法通过将年份作为四位数字符串传递来获得相同的结果?

1 个答案:

答案 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