Fessではファイルの更新日時とかlongとしてもっていたのだけど、日付のファセットをやろうと思うとdate型にする必要があるようなので、型を変更することにした。そもそも、なんでlongにしていたかというと、いまいちSolrJ経由でdate型としての突っ込み方を調べていなかったからです…。(まぁ、簡単に言うと手抜きです…ごめんなさい) というわけで、今回、Solrでdate型を利用することにしたのだけど、Solrのschema.xml的には
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
というような型の定義があると思うけど、これを
<field name="tstamp" type="tdate" stored="true" indexed="true"/>
という感じで利用する。記述フォーマットについてはSolrのorg.apache.solr.schema.DateFieldのJavaDocとか見れば良いと思うけど、ISO 8601に従う感じで、XML Schema にある、より厳しくした感じの正規化した日付表現で以下のような感じ。
- 1995-12-31T23:59:59Z
- 1995-12-31T23:59:59.9Z
- 1995-12-31T23:59:59.99Z
- 1995-12-31T23:59:59.999Z
Javaのコードで上記の文字とDateへの変換はorg.apache.solr.common.util.DateUtilを使えば良さそう。パースの方はDateUtil.parseDate(String)で良いと思うけど、日付から文字列へはDateUtil.getThreadLocalDateFormat().format(date)という感じでやればよさそう。FessではFessFunctionsで実装して、JSP上からも${fe:〜}で利用している。