以下の記事では、テストを目的としてLiferay Portal 6.2 EEとSolr 4.3.1を接続する際の手順を紹介しています。 なお、Liferay Portal 6.2 EEでは、Solr 4の対応バージョンはバージョン4.3.1~4.10.2となっています。
解像度
以下の手順に従って、Liferay Portal 6.2 EEとともにSolrを起動し、Liferay Marketplaceで利用可能なLiferay Solr 4 Search Engineアプリを介して接続します。
-
Solr 4.3.1 をダウンロードし、都合の良い場所に解凍してください。 解凍したSolrのルートを
SOLR_HOME
として扱う。 -
SOLR_HOME/example
に移動して実行java -jar start.jar
- あなたのsolrサーバーは、ポート
8983
で(Jettyで)実行されています。 その場合は、SOLR_HOME/example/etc/jetty.xml
でポートを変更することができます。 本記事では、 、 ポートを初期値から変更していないことを前提としています。 - http://localhost:8983/solr に移動して、Solrが正しく動作しているかどうかを検証します。
- サーバーが起動していることを確認したら、Solrサーバーを停止します。
- Liferay Portal 6.2 EE を起動します。 バンドルのルートを
$liferay-home
として扱う。 - Liferay Solr 4 Search Engine app をマーケットプレイスからダウンロードし、ポータルにデプロイします。
- プラグインの導入が完了したら、ポータルを停止します。
-
$liferay-home/webapps/solr4-web/WEB-INF/conf/schema.xml
を$solr-home/example/solr/collection1/conf
へコピーします。 -
$liferay-home/webapps/solr4-web/WEB-INF/conf/solrconfig.xml
を$solr-home/example/solr/collection1/conf
へコピーします。 - Liferay Solr 4 Search Engine 2.1.0 以降をご利用の場合:
-
TOMCAT_HOME/webapps/solr4-web/WEB-INF/solr-ext.properties
以下の内容で作成します。server.http.url=http://localhost:8983/solr
- 保存
-
- 古いバージョンのLiferay Solr 4 Search Engineプラグインを使用している場合:
-
LIFERAY_HOME/tomcat-7.0.62/webapps/solr4-web/WEB-INF/META-INF
に移動して、solr-spring.xml
というファイルを編集します。 次のスニペット8080/solr" />
を探し、8983/solr" />
に置き換えてください。 - 保存
-
- Solrサーバーを起動する
- Liferay Portalの起動
- Liferay Portal Control Panel > Server Administration に移動し、完全な再インデックス、検索インデックスの再インデックスを実行します。
接続が生きているかどうかをテストするには、Solrのログを確認します。 10秒ごとにLiferay PortalがSolrサーバーにpingを打ち、Solrのログにこのように表示されます:
395631 [qtp227416342-15] INFO org.apache.solr.core.SolrCore – [collection1] webapp=/solr path=/admin/ping params={wt=javabin&version=2} hits=0 status=0 QTime=1 395631 [qtp227416342-15] INFO org.apache.solr.core.SolrCore – [collection1] webapp=/solr path=/admin/ping params={wt=javabin&version=2} status=0 QTime=1
再インデックスに成功したかどうかを確認するには、Solrの管理ページに移動し、ドロップダウンメニューから Collection1 を選択します。 クエリをクリックし、 クエリの実行をクリックします。 Solrは、これまでにインデックスしたものをすべて表示するはずです:
共通の課題
メモリが足りない
デフォルトでは、Jettyはヒープサイズ4g、パーマサイズ82mbで起動します。 何らかの理由でテストシナリオに十分でない場合、追加のパラメータを指定することで割り当てられたメモリを変更することができます:
java -jar -Xmx8g -XX:MaxPermSize=128m start.jar
注:jmap -heap を実行することで、メモリ割り当てを確認することができます。
未定義フィールド _
Solrのログで:
ERROR org.apache.solr.core.SolrCore – org.apache.solr.common.SolrException: undefined field companyId
Liferayのログで:
WARN [liferay/search_writer/SYSTEM_ENGINE-1][ProxyMessageListener:81] com.liferay.portal.kernel.search.SearchException: undefined field companyId
- Solr EEプラグインからSolrサーバーに
schema.xml
をコピーしたことを確認してください(上記ステップ9参照)。 -
schema.xml
が更新された場合、Solrサーバーを再起動する必要があります。
LiferayがSolrサーバーに到達できない。
Liferayのログで:
WARN [liferay/search_writer/SYSTEM_ENGINE-2][ProxyMessageListener:81] com.liferay.portal.kernel.search.SearchException: Server at http://localhost:8080/solr returned non ok status:503, message:Service Unavailable
-
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のパフォーマンスについては、こちら(https://wiki.apache.org/solr/SolrPerformanceFactors)をご参照ください。 -
本番を落とさずにインデックスを張り直す方法はあるのでしょうか?
はい。 LiferayのSolrプラグインとSolrサーバーの両方が適切に設定されている限り、稼働中のLiferayサーバーのSolrへの切り替えはシームレスなプロセスで、本番サーバーをダウンさせる必要はない。
-
再インデックス化の間、私のポータルはどうなりますか?
再インデックス作成中のLiferayポータルの可用性については、デフォルトのLuceneエンジンとSolrサーバーに違いはありません:プロセスが終了するまで、検索結果はゼロか不正確なカウントになることがあります。 そのため、サーバーの負荷が最も低くなる時間帯に、サーバー全体の再インデックスを予定しておくとよいでしょう。