Solrでクエリ時にNOWに時間を足す

Solrでクエリ時にNOWに時間を足す

弊社ではsolrを検索エンジンとして使っているプロジェクトがいくつかあります。

ここ最近はRubyOnRailsでの開発ばかりをやっていてSolrは触っていなかったのですが、最近になって触る機会がまた増えてきました。

そして、今日は時刻検索する場合にすこしハマりました。

検証環境

  • Solr 5.3.1

Solrでは現在時刻までのデータで絞り込みたい場合、以下の様な指定でフィルタをかけられます。

fq=published_at:[* TO NOW]

NOWが現在時刻を現していますが、このNOWはUTCの時刻になってしまうため、データがJSTの場合は+9時間する必要があります。

Solrのタイムゾーンを変たらどうかと考えてJettyの起動ファイルに以下のように環境変数を指定して試してみました。

if [ -z "$SOLR_TIMEZONE" ]; then
  SOLR_TIMEZONE='JST'
fi

Solr自体のタイムゾーンはJSTになりましたが、クエリのNOWはUTCで指定されてしまい、うまく検索ができませんでした。

Solrの設定でどうにかするのは諦めてクエリ時に以下のように9時間分足して指定することでとりあえず解決しました。

published_at: [* TO NOW+9HOUR]

この後、結局データをJSTではなくUTCにすることになったので+9時間して投げていたクエリは元に戻しました。。。

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。