2015-11-04 82 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