1

最近、Apache SOLR 4.1 war ファイルを Tomcat 6 サーバーにデプロイする際に問題が発生しました。サーバー ライブラリ ($CATALINA_HOME/lib) には、一部のレガシー検索アプリケーション用の古い lucene 実装ライブラリ (2.9+) があります。SOLR の .war ファイル WEB-INF/lib には、新しい 4.1 lucene 実装の jar ファイルがあります。Tomcat 6 のドキュメントを確認すると、SOLR ライブラリは最初にロードする必要があるようです。ただし、経験上、そうではありません。これを実行中のサーバーにデプロイすると、管理者ダッシュボードに 2.9.0 lucene 実装がロードされていることが示されます。

さらにひねりを加えると、Tomcat サーバーを停止して再起動すると、代わりに 4.1 に切り替わります。おそらく想像できると思いますが、これは私にスレーブ レプリケーションの悲しみをもたらしました。私の最初のインデックスは 2.9 lucene を介して構築されたと思われるため、ある時点でコンテナーを再起動し、その後ロードされた 4.1 を使用して更新し、2.9 lucene 実装スレーブに複製しようとしたため、すべて失敗しました。

ここでの提案は大歓迎です。SOLR war ファイルから 4.1 ライブラリを削除しようとしましたが、いくつかの依存関係がそれらを必要としているように見えるため、ロードに失敗しました (ただし、クラス ローダーは展開後に「共通ライブラリ」の lucene 実装を選択します!) すべてのレガシーを更新することは現実的ではありません。これらのサーバー上のソフトウェアを lucene 4 に変換する必要があります。クラスローダーがこのように実行される理由は何ですか?

編集:問題をさらに複雑にするために、4.1.0 lucene実装を示す新しく開始したTomcatにSOLRがあり、コアをリロードするか、Tomcatマネージャーを介してWebアプリケーションのリロードを行うと、2.9.0に戻ります! これは明らかに受け入れられません。

4

1 に答える 1

0

与えられたシナリオでは、Solr を別の Web コンテナー ( jetty のような軽量のコンテナー) で実行することを選択します。しかし、あなたのアーキテクチャにその柔軟性があるかどうか、またはこれらのコンテナの保守性に懸念があるかどうかはわかりません. これらの懸念の影響を受けなければ、このアプローチを進めることができます。

もう 1 つのオプションは、Tomcat に、Solr 用の WEB-INF ライブラリ (WEB-INF/lib) と、Lucene を使用したレガシー検索用のサーバー ライブラリ ($CATALINA_HOME/lib) を使用するように依頼することです。

パラメータを介してWeb-logic Serverでこれを実現できます。

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

Solr web-app の「weblogic.xml」。

Tomcatでもそれを行うオプションがあることを願っています!

于 2013-02-27T13:43:43.040 に答える