Solrをイジった備忘録その1(データ投入編)

【Solrへのデータ投入】
 
Solrへのデータの投入の流れは以下のようになります。
======
ドキュメントを作って⇒SolrServerにaddして⇒コミットして⇒最適化して
======
 
Javaを使って、Solrへデータを投入する場合、SolrJというライブラリがあります。
SolrJではSolrServerというクラスを使ってSolrと会話をします。
SolrServerは抽象的なオブジェクトになっていて、実装は以下の3つです。
 
 1. CommonsHttpSolrServer
  HTTP通信でデータを入れ込みます。
  SolrはJettyやTomcatといったServletコンテナ上で動作するアプリケーションなので、
  なんといいますか、普通にWebアプリみたいな感じです。
  Restfulとかそういうわけでもなく、その辺も普通のWebアプリ的です。
 
 2. EmbeddedSolrserver
  中身の実装は良くわかりませんが、直接Solrにデータを入れ込みます。
  HTTP的な処理をしなくて良いので速度は早くなります。
  イメージ的には、Solrからデータベースやファイルシステムなどに
  データを取りにいって反映する感じです。
  自分のサービスではEmbeddedSolrServerを使用しています。
 
 3. LBHttpSolrServer
  LBはロードバランスの略で、ラウンドロビンによる負荷分散ができるそうです。
  使ったことありません。
 
今回は負荷テスト用に1.のCommonsHttpSolrServerを使ってみました。
テスト環境なのでプロキシサーバを介して行うのですが、なぜかちとハマりました。
 
プロキシサーバを設定するのに、
– シェルの中でexportで環境変数にセットしたり
– JavaVMの起動オプションで-Dでセットしたり
– Javaの中でSystem.getProperties().put~とかやったり
 
が、うまいこと効かなくて。。
最終的には以下のようなやり方で対応しました。
======
// commonsのHTTPクライアントのインスタンスを作って
HttpClient client = new HttpClient();
// 作ったHTTPクライアントにプロキシの設定をしてあげて
client.getHostConfiguration().setProxy(“プロキシサーバ”, ポート);
// SolrServerをnewする時に作ったHTTPクライアントを渡してあげます
SolrServer server = new CommonsHttpSolrServer(“http://サーバ/solr”, client);
// ちなみに疎通確認ように、SolrServerにはpingなんていうメソッドがあったりします。
server.ping();
======
 
で、次にドキュメントの作成と、Solrへドキュメントを突っ込むところですが、
非常に簡単です。
======
// ドキュメントのオブジェクトを生成して
SolrInputDocument document = new SolrInputDocument();
// フィールド名に値をaddします
document.addField(“フィールド名”, “値”);
 ・・ 何個かフィールドがある ・・
// SolrServerにadd
server.add(document);
======
 
addしただけでは、インデックスに反映されません。
Solrの管理画面上で参照すると docsPending というところに
数値が乗っかってくるのが分かります。(http://サーバ/solr/admin/stats.jsp)
 
インデックスに反映させるには、RDBMSと同じようにcommitしてあげます。
======
server.commit();
======
コミットすると、Solrは内部的に11個のインデックスファイルを生成します。
これが積もり積もっていくと、ファイルが増えすぎて、、な状態になります。
 
ということで、commitしたら何回かに1回は最適化(optimize)してあげます。
======
server.optimize();
======
Apache Solr入門には5回に1回は~と記述されていました。(267ページ)
 
これだけでイケるのでシンプルで良いですね。
 
次はロギングの話でも。。
 
ってか↓この本メチャメチャいいです!お世話になっています。

Apache Solr入門 ―オープンソース全文検索エンジン
関口 宏司 三部 靖夫 武田 光平 中野 猛 大谷 純
技術評論社
売り上げランキング: 4461
おすすめ度の平均: 5.0

5 検索エンジンに興味のある全ての知識レベルの方にお勧め

コメント

  1. […] 以前Solrをイジった備忘録その1(データ投入編)でEmbeddedSolrServerなんちゅうのを使ってますよ なんてエントリを書きましたが、その時もRequestHandlerを追加したわけなんですが、 ローカルのUb […]

タイトルとURLをコピーしました