以下の記事では、テストを目的としてLiferay 6.2 EEとSolr 3.5.0を接続する手順を概説しています。
なお、Liferay Portal 6.2 EEでは、Solr 3の対応バージョンはバージョン3.5.0となります。
解像度
以下の手順でSolr、Liferay 6.2 EEを起動し、Liferay Marketplaceで販売している Solr 3 EE plugin を介して接続することが可能です。
-
Solr 3.5.0 をダウンロードし、都合の良い場所に解凍してください。 解凍したSolrのルートを
$solr_homeとして扱います。 -
$solr_home/exampleに移動して実行java -jar start.jar - solrサーバーがポート8983で(Jettyで)実行されるようになりました。
$solr_home/example/etc/jetty.xmlでポートを変更することができますので、ご希望であれば変更してください。 本記事では、ポートを初期値から変更していないことを前提としています。- http://localhost:8983/solr/admin に移動して、Solrが正しく動作しているかどうかを検証します。
-
Solrの管理画面が表示されるはずです。
- サーバーが起動していることを確認したら、Solrサーバーを停止します。
- Liferay Portal 6.2 EE SP8 を起動します。 バンドルのルートを
$liferay-homeとして扱います。 - マーケットプレイスからSolr 3 EEプラグインをダウンロードし、ポータルにデプロイします。
- プラグインの導入が完了したら、ポータルを停止します。
-
$liferay-home/tomcat-7.0.42/webapps/solr3-web/WEB-INF/META-INFに移動して、solr-spring.xmlというファイルを編集します。- 以下のスニペットを探してみてください:
8080/solr" />とし、ポートを 8983に変更する。 - すなわち、
8983/solr" />
- 以下のスニペットを探してみてください:
-
$liferay-home/webapps/solr3-web/WEB-INF/conf/schema.xmlを$solr-home/example/solr/confへコピーします。 -
$liferay-home/webapps/solr3-web/WEB-INF/conf/solrconfig.xmlを$solr-home/example/solr/confへコピーします。 - Solrサーバーを起動します。
- Liferay Portalの起動
- Liferayのコントロールパネル、サーバー管理セクションに移動し、フルリインデックスを実行します。
接続が生きているかどうかをテストするには、Solrのログを確認します。 10秒ごとにLiferayはSolrサーバーにpingを打ち、Solrのログにこのように表示されます:
Nov 27, 2014 9:34:43 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/admin/ping params={wt=javabin&version=2} hits=0 status=0 QTime=2
Nov 27, 2014 9:34:43 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/admin/ping params={wt=javabin&version=2} status=0 QTime=2
再インデックスに成功したかどうかを確認するには、Solrの管理ページに移動して、 Searchをクリックします。
Solrは、これまでにインデックスしたものをすべて表示するはずです:
共通の課題
メモリが足りない
デフォルトでは、Jettyはヒープサイズ4g、パーマサイズ82mbで起動します。 何らかの理由でテストシナリオに十分でない場合、追加のパラメータを指定することで割り当てられたメモリを変更することができます:
java -jar -Xmx8g -XX:MaxPermSize=128m start.jar
注:jmap -heapを実行することで、メモリ割り当てを確認することができます。
Liferayのログで
10:42:41,353 WARN [liferay/search_writer/SYSTEM_ENGINE-2][ProxyMessageListener:81] com.liferay.portal.kernel.search.SearchException: Not Found__Not Found__request: http://localhost:8080/solr/update?wt=javabin&version=2 [Sanitized]
-
solr-spring.xmlが正しい場所を指すように修正したことを確認してください(上記ステップ8を参照)。 -
solr-spring.xmlを変更した場合は、Liferay Portal を再起動する必要があります。
追加情報
-
なぜ、Solrを別のアプリケーションサーバーにインストールする必要があるのでしょうか? Liferayと連動してインストールすることはできないのでしょうか?
もちろん可能ですが、それではSolrを使う意味がありません。目的は、検索インデックスを別のボックスにオフロードすることで、Liferayのインストールに必要な処理を解放することだからです。
-
なぜ「SolrException:Bad Request "エラーが発生するのですが?
Liferay Solr plugin .war の Schema.xml を $SOLR_HOME/conf に追加することを忘れている可能性が高いです。
-
なぜ、「SolrException:Not Found」エラーが発生するのですが?
Solr-Spring.xmlのSolrホームのURLの設定が間違っている可能性が高いです。
-
Luceneからの移行はどのようにすればよいですか?
上記の手順で、再インデックスするだけです(特に「移行」の手順はありません)。 再インデックスに関して:
-
インデックスの再作成にはどれくらいの時間がかかるのでしょうか?
再インデックス化するデータのサイズ、SolrサーバーのJVM設定やアプリケーションの構成、Solrインスタンスの展開タイプ(シングルノードまたはSolrCloud)など、多くの要因に依存します。 デフォルトのLuceneエンジンを使ってポータル全体を再インデックス化するのにかかる通常の時間は、おおよその目安になります。
SolrのPerformance Factorsの詳細については、リンクをクリックしてください。
-
本番を落とさずにインデックスを張り直す方法はあるのでしょうか?
はい。 LiferayのSolrプラグインとSolrサーバーの両方が適切に設定されている限り、稼働中のLiferayサーバーのSolrへの切り替えはシームレスなプロセスで、本番サーバーをダウンさせる必要はない。
-
再インデックス化の間、私のポータルはどうなりますか?
再インデックス作成中のLiferayポータルの可用性については、デフォルトのLuceneエンジンとSolrサーバーに違いはありません:プロセスが終了するまで、検索結果はゼロか不正確なカウントになることがあります。 そのため、サーバーの負荷が最も低くなる時間帯に、サーバー全体の再インデックスを予定しておくとよいでしょう。