ライブラリディレクトリとディレクティブ

ここでは、Solr プラグインの .jar ファイルを Solr から見えるようにする、2 つのシンプルで効果的な方法について説明します。

このようなファイルは、しばしば「ライブラリ」または略して「libs」と呼ばれます。基本的に、それらを特別な場所に配置するか、構成から明示的に Solr に伝えることができます。

ライブラリ間に重複または相互依存関係がある場合は、順序に注意してください。トップダウンで検索されるスタックのように考えることができます。トップには lib ディレクティブが逆順で、次に Solr コアの lib、次に Solr ホームの lib、最後に Solr 自体があります。

ライブラリディレクトリ

Solr プラグインの .jar ファイルを配置できるいくつかの特別な場所があります。

  • <solr_home>/lib/:ここに配置された .jar ファイルは、ノードで実行されているすべての Solr コアと、solr.xml で参照されるノードレベルのプラグイン(つまり、基本的にすべて)で使用できます。このディレクトリはデフォルトでは存在しないため、作成する必要があります。Solr の本番環境への移行 を参照してください。

  • <core_instance>/lib/:ユーザー管理クラスタまたは単一ノードインストールでは、特定の Solr コアだけにプラグインを追加する場合があります。これは <core_instance>/conf/ ディレクトリに隣接して作成します。デフォルトでは存在しません。

  • <solr_install>/lib/:ここに配置された .jar ファイルは、ノードで実行されているすべての Solr コアと、solr.xml で参照されるノードレベルのプラグイン(つまり、基本的にすべて)で使用できます。<solr_home>/lib/ とは異なり、このディレクトリは常にインストールディレクトリに配置されるため、たとえばカスタム Dockerfile でカスタムプラグイン jar を配置するために使用できます。

  • <solr_install>/server/solr-webapp/webapp/WEB-INF/lib/:Solr 自体とその依存関係の .jar ファイルはここにあります。特定のプラグインまたはプラグインへのアドオンはここに配置する必要があり、その必要性に関する明示的なドキュメントが用意されています。

  • <solr_install>/server/lib/ext: SolrサーバーとSolr Core/SolrJで使用される.jarファイル。

SolrはHTTPサーバー機能を提供するためにJettyを組み込んでいます。Jettyには、Jetty自身とそのプラグイン/モジュール、またはJVMレベルのプラグイン(例:ロガー)用の.jarファイルを含むいくつかのディレクトリがあります。これらの場所では、Solrプラグインは動作しません。

SolrConfig内のLibディレクティブ

プラグインとリソースファイルパスの両方は、solrconfig.xml内の<lib/>ディレクティブで設定可能です。ディレクティブがディレクトリと一致する場合、そのディレクトリからリソースを解決できます。ディレクティブが.jarファイルと一致する場合、Solrプラグインとその依存関係がそこから解決されます。リソースも.jarファイルに配置できますが、これは一般的ではありません。他の種類のファイルを参照することはエラーです。

<lib/>ディレクティブには、次の2つの属性のいずれか1つ(両方ではありません)が必要です。

  • path: 単一のディレクトリ(リソース用)またはファイル(プラグイン.jar用)を参照するために使用されます。

  • dir: 指定されたディレクトリのすべての直接の子孫を参照するために使用されます。オプションでregex属性を指定して、正規表現に一致するものにフィルタリングできます。

すべてのディレクトリは、SolrコアのinstanceDirを基準として解決されます。

これらの例は、Solrにモジュールをロードする方法を示しています。

  <lib dir="${solr.install.dir:../../../..}/modules/extraction/lib" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/modules/clustering/lib/" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/modules/langid/lib/" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/modules/ltr/lib/" regex=".*\.jar" />