【Solr】Date Mathによる日付表現
はじめに
Solr では、pdate 等の時刻を扱うフィールドに対するクエリで使用できる Date Math という表現が用意されています。「今日からN日前」のような表現を使いたいときに便利です。 この記事ではDate Mathについてまとめました。
通常の日付表現
Solr では日付のフィールドは以下の形式で表現します。
2020-03-22T14:55:29Z
ミリ秒までの精度があるので、小数点表記も有効です。
2020-03-22T14:55:29.123Z
時刻は秒まできちんと表記しなければエラーになります。
ミリ秒よりも小さい桁が書いてあっても受付けますが、無視されます。
エラーになる例
2020-03-22 2020-03-22T14:55Z
Date Math
Date Mathは、特定の時点からの相対的な時刻を指定しやすくするための表記法です。
起点として良く使用される「今現在」を指定するために NOW という Date Math が用意されています。
Date Mathではまず起点となる日付を書き、それプラスN日という形で表記します。
「2ヶ月後」
NOW+2MONTH
「10日前」
NOW-10DAY
「1年後」
NOW-1YEAR
プラス/マイナスの部分は連続して書くことができます。
NOW+1YEAR+3MONTH+5DAY
起点として通常の日付を指定することもできます。
2020-03-22T10:15:18Z+7DAY
丸め表記
スラッシュ(‘/’)を併用することで、「〜の最初」を表現できます。
たとえば現在時刻が2020年3月22日11時22分33秒だとします。
NOW/HOUR
→2020年3月22日11時00分00秒
NOW/DAY
→2020年3月22日00時00分00秒
Date Math と組み合わせて使えるリクエストパラメータ
NOW
NOW パラメータにより、Date Math で記述した “NOW” を特定の日付に設定することができます。 NOW パラメータには、いわゆる UNIX TIME の Long 値を指定します。
NOW パラメータを指定することで、複数のノードにまたがる分散検索での NOW の値を揃えることができます。テストのときにも役に立ちそうです。
TZ
TZ パラメータを指定することで、デフォルト UTC である Date Math の日付計算を別のタイムゾーンとして扱うことができます。