1.4.2 solr字段類型
使用Dates(日期)
日期格式
solr的TrieDateField(DateField已經棄用)字段類型,表示精確到毫秒的時間點.在XML Schema 規范中所使用的格式是一個嚴格的日期事件的規范表示格式.
YYYY-MM-DDThh:mm:ssZ:
YYYY:年
MM:月
DD:日
hh:24進制小時
mm:分鍾
ss:秒
Z:表示UTC時間
注意:沒有時區可以指定,這個日期字符串一般表示UTC時間.這里有一個例子:
1972-05-20T17:33:18Z
你可以選擇加入部分小數,不允許在末尾加0,任何精確度超出毫秒的均被忽略掉:
1972-05-20T17:33:18.772Z
1972-05-20T17:33:18.77Z
1972-05-20T17:33:18.7Z
Date的數學運算
solr的日期字段類型同樣支持日期的數學運算表達式,這使它很容易的及時創建時間相對於固定的時刻而言,當前時間可以用"NOW"來表示:
日期數學運算語法
日期表達式可以添加一些指定單位的時間數字,也可以對當前時間通過指定的單位來四舍五入.表達式可以鏈式的,從左到右執行.斜杠"/"表示四舍五入.
例子:
表示兩個月之后的當前時間點:NOW+2MONTHS
表示一天以前的時間點:NOW-1DAY
表示當前小時開始:NOW/HOUR
下面計算(精確到毫秒)未來6個月又3天的時間點,然后四舍五入時間到天(day):
NOW+6MONTHS+3DAYS/DAY
混合方式:1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY
請求參數
NOW
example:
q=solr&fq=start_date:[* TO NOW]&NOW=1384387200000
TZ
默認的,所有日期的數學表達式都是相對於UTC時區來評估的.TZ屬性可以指定時區.來覆蓋默認的UTC時區.
例如,這個請求對當前月的每一天使用分面范圍查詢,時區為UTC.
http://localhost:8983/solr/select?q=*:*&facet.range=my_date_field&facet=true
&facet.range.start=NOW/MONTH&facet.range.end=NOW/MONTH%2B1MONTH&facet.range.gap=%2B1DAY
結果:
<int name="2013-11-01T00:00:00Z">0</int> <int name="2013-11-02T00:00:00Z">0</int> <int name="2013-11-03T00:00:00Z">0</int> <int name="2013-11-04T00:00:00Z">0</int> <int name="2013-11-05T00:00:00Z">0</int> <int name="2013-11-06T00:00:00Z">0</int> <int name="2013-11-07T00:00:00Z">0</int>
指定時區:
http://localhost:8983/solr/select?q=*:*&facet.range=my_date_field&facet=true &facet.range.start=NOW/MONTH&facet.range.end=NOW/MONTH%2B1MONTH&facet.range.gap=%2B1DAY &TZ=America/Los_Angeles
結果:
<int name="2013-11-01T07:00:00Z">0</int> <int name="2013-11-02T07:00:00Z">0</int> <int name="2013-11-03T07:00:00Z">0</int> <int name="2013-11-04T08:00:00Z">0</int> <int name="2013-11-05T08:00:00Z">0</int> <int name="2013-11-06T08:00:00Z">0</int> <int name="2013-11-07T08:00:00Z">0</int>