よしだのブログ

サブタイトルはありません。

Solr 5.0 リリース!

どうも! Solr がメジャーバージョンアップしましたね!いぇい。

というわけで、lucidworks 社のブログエントリーから今回のハイライトを見ていきたいと思います。

Apache Solr 5.0 Highlights - Lucidworks

所感としては、眼を見張るような大きな機能追加等は見受けられないものの、大規模運用時のクラスターの安定性の向上や、管理機能の充実によりより使いやすくなったように思います。また、地味ですが multi-value の data 型がレンジ検索できるようになったとか、結構嬉しいです。

というわけで、以下からどうぞ。

ユーザビリティの向上

  • 実装の詳細を覆い隠すかたちで、API の使いやすさを向上させている
  • 4.10 から導入された solr スクリプトでできることが大幅に増えた。コレクションの設定ファイルのセットをコピーしたり、ドキュメントのインデキシングやコレクションの削除などができるようになった。以下、その例
  • solrcloud モードで起動し、gettingstarted コレクションに lucidworks.com のインデックスを作成した後、ブラウザでコレクションの詳細を確認する。最後に、getingstarted コレクションを削除する。
bin/solr start -e cloud -noprompt
bin/post gettingstarted http://lucidworks.com
open http://localhost:8983/solr/gettingstarted/browse
bin/solr delete -c gettingstarted

管理機能

パラメータのセットを定義し、検索時に利用できるようになった。

Add/edit param sets and use them in Requests https://issues.apache.org/jira/browse/SOLR-6770

これまでは、faset や sort などの検索パラメータは、毎回クエリに条件として設定するか、あらかじめ solrconfig.xml の requesthandler の定義にデフォルト値として記載しておく必要がありました。5.0 では、起動中の Solr にリクエストで、そのパラメータのセットを設定し、検索時に利用ができるというものです。以下、上記のチケットより利用イメージの例です。

  • パラメータのセットを登録します。

以下の内容は、クエリのフォーマットに edismax を使って、デフォルトのクエリとして : を設定して、10件取ってきて・・というような一般的な内容です。繰り返し、再利用して使いたいパラメーターのセットを登録します。json 形式のデータを http で投げます。

curl http://localhost:8983/solr/collection1/config/params -H 'Content-type:application/json' -d '{
"set":{"query":{
  "defType":"edismax",
  "q.alt":"*:*",
  "rows":10,
  "fl":"*,score" },
 "facets":{
  "facet":"on",
  "facet.mincount": 1
 },
"velocity":{
 "wt": "velocity",
 "v.template":"browse",
 "v.layout": "layout"
}
}
}
  • 設定したパラメータセットを利用して検索する

次に、登録したパラメーターセットを利用します。userParams で利用したいパラメーターセットを指定します。この際に、パラメータセットを複数指定することも可能です。*1

http://localhost/solr/collection/select?useParams=query
  • 予めリクエストハンドラに設定しておく

また、あらかじめ定義したパラメータセットを利用するリクエストハンドラを用意することも可能です。これによって、以下の例のように、新たに定義した dump1 というリクエストハンドラーを呼び出すと、クライアントが毎回明示的に userParams をつけなくても、自動的に query というパラメータセットを利用することが出来ます。

<requestHandler name="/dump1" class="DumpRequestHandler" useParams="query"/>

この方式の嬉しい点は、はやり動かしながらパラメータセットを変更できる点でしょう。これまでのように再起動もしくはリロードが不要で、solrcinfig.xml というコアで重要なファイルをいじることなく、パラメーターセットをいじることができるのは管理がやりやすくなるように思います。

BALANCESLICEUNIQUE

SolrCloud では、自動的にリーダーノードがクラスタ中から選出されるようになっているが、サーバーのメンテナンス等、システム管理上の理由から特定のノードをリーダーに設定したい場合があります。5.0 から、これが可能になっています。

https://issues.apache.org/jira/browse/SOLR-6491

また、その機能追加の中で追加された API の1つに、BALANCESHARDUNIQUE というものが有ります。通常の設定方法では、1台ずつ設定していく手順になりますが、100台クラスのクラスターを構成していた場合、非常に面倒な作業になります。これを一括して行おうというのが、このAPI です。

その他の管理機能のエンハンス

  • スキーマAPIで、詳細を隠す形でのエンハンスが図られており、フィールドの追加などがやりやすくなっている

-トランザクションログの再実行時のステータスをログに出力できるようになった。スローリクエストのログもオプションでサポートした。

  • *nix 環境のサービスとしてインストールするためのスクリプトを含めるようにした

スケーラビリティ

Solr 5.0 では、クラスターの状態を保管する方法を変更することによって、大量のコレクションをスケールすることができるようになりました。5.0 よりも前では、クラスターの状態は1つのファイルに書かれており、全てのノードから変更をチェックされ、クラスターの状態に変更があった場合はこのファイルに書かれました。5.0 ではデフォルトでは、ノードごとにファイルをもたせるようにすることによって、全てのノードはクラスターの状態を確認するために、自身のファイルだけを見れば良くなりました。

安定性

  • レプリカ時の帯域幅を指定できるようになった
  • timeAllowed パラメータの値に従い、分散検索時にタイムアウト時間経過後も残っていたクエリを停止するようになった
  • ワイルドカードなどの重いクエリを投げられると、最悪クラスタ全て停止ということもあった

分散IDF

  • 分散IDFをついにサポート
  • 4つの実装が含まれる。デフォルトでは local のみを見るようになっているが、solrconfig.xml の設定変更でグローバルなIDFを見るように変更できる

統計コンポーネント

  • 統計コンポーネント(stats)を、ファンクションコンポーネントと組み合わて使うことができるようになった
stats.field={!func key=mean_rating mean=true}prod(user_rating,pow(editor_rating,2))

その他

  • DataRangeField の、multi-value フィールドのサポート
  • spacial field が、マイルとキロメートルをサポートしてより使いやすく
  • MoreLikeThis が、SolrCloudのサポート
  • Blob stage API でカスタムの jar をアップロードし、Config API でアップロードした jar を登録することで、容易にカスタムハンドラーを利用できるようになった
  • Collection API が SolrJ でサポート
  • Tika の 1.7 へのバージョンアップ (Outlook PST ファイル、MATLABファイルのサポート)

以上!

*1:複数のパラメータセット間で、同じパラメータを利用していた場合、どのような順番で値が採用されるかは確認が必要です。