初期化パラメータ
solrconfig.xml の <initParams> セクションでは、ハンドラ設定の外部でリクエストハンドラパラメータを定義できます。
これが望ましいユースケースはいくつかあります。
-
一部のハンドラはコード内で暗黙的に定義されており(暗黙的リクエストハンドラを参照)、暗黙的に定義されたプロパティの一部を追加、追加、またはオーバーライドする方法が必要です。
-
ハンドラ間で共通に使用されるプロパティがいくつかあります。 これにより、これらのプロパティの定義を1つだけ保持し、複数のハンドラに適用できます。
たとえば、複数の検索ハンドラで同じフィールドリストを返す場合は、各リクエストハンドラ定義で同じパラメータセットを定義することなく、<initParams> セクションを作成できます。異なるフィールドを返す必要がある単一のリクエストハンドラがある場合は、通常どおり個々の <requestHandler> セクションでオーバーライドパラメータを定義できます。
<initParams> セクションのプロパティと設定は、リクエストハンドラのプロパティと設定を反映しています。 リクエストハンドラと同様に、デフォルト、追加、および不変量のセクションを含めることができます。
たとえば、_default の例でデフォルトで定義されている <initParams> セクションの1つを次に示します。
<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell">
<lst name="defaults">
<str name="df">_text_</str>
</lst>
</initParams>
これは、パスセクションで名前が付けられたすべてのリクエストハンドラのデフォルト検索フィールド( "df")を "text" に設定します。後で /query リクエストハンドラがデフォルトで異なるフィールドを検索するように変更する場合、/query の <requestHandler> セクションでパラメータを定義することにより、<initParams> をオーバーライドできます。
構文とセマンティクスは <requestHandler> の構文とセマンティクスに似ています。 属性は次のとおりです。
パス-
オプション
デフォルト:なし
パラメータを使用するパスのカンマ区切りリスト。以下で説明するように、パスでワイルドカードを使用してネストされたパスを定義できます。
名前-
オプション
デフォルト:なし
このパラメータセットの名前。パスが明示的に名前付けられていない場合、リクエストハンドラ定義で名前を直接使用できます。
<initParams>に名前を付けると、パスとして定義されていない<requestHandler>でパラメータを参照できます。たとえば、
<initParams>セクションの名前が "myParams" の場合、リクエストハンドラを定義するときに名前を呼び出すことができます。<requestHandler name="/dump1" class="DumpRequestHandler" initParams="myParams"/>
initParamsのワイルドカード
<initParams> セクションは、定義されたパラメータを使用する必要があるネストされたパスを定義するためにワイルドカードをサポートできます。単一の星印(*)は、1レベル深いネストされたパスがパラメータを使用する必要があることを示します。二重星印(**)は、深さに関係なくすべてのネストされたパスがパラメータを使用する必要があることを示します。
たとえば、次のような <initParams> がある場合
<initParams name="myParams" path="/myhandler,/root/*,/root1/**">
<lst name="defaults">
<str name="fl">_text_</str>
</lst>
<lst name="invariants">
<str name="rows">10</str>
</lst>
<lst name="appends">
<str name="df">title</str>
</lst>
</initParams>
例の最初の行で3つのパスを定義しました
-
/myhandlerは直接パスとして宣言されています。 -
/root/*は、単一のアスタリスクを使用して、パラメータが1階層の深さのパスに適用されることを示します。 -
/root1/**は、二重のアスタリスクを使用して、パラメータがネストされたパスの深さに関係なく、すべてに適用されることを示します。
リクエストハンドラを定義する場合、ワイルドカードは次の方法で機能します。
<requestHandler name="/myhandler" class="SearchHandler"/>
/myhandler クラスは <initParams> でパスとして指定されているため、これらのパラメータが使用されます。
次に、/root/search5 という名前のリクエストハンドラがあります。
<requestHandler name="/root/search5" class="SearchHandler"/>
/root よりも1階層深いネストされたパス用のワイルドカードを定義したので、このリクエストハンドラはパラメータを使用します。ただし、/root/search5/test は /root から1階層よりも深いため、こちらはパラメータを使用しません。
<requestHandler name="/root/search5/test" class="SearchHandler"/>
すべてのレベルのネストされたパスを定義する場合は、パスの例 /root1/** のように二重のアスタリスクを使用する必要があります。
<requestHandler name="/root1/search/tests" class="SearchHandler"/>
/root1 の下のパスは、リクエストハンドラで明示的に定義されているかどうかに関係なく、一致する initParams セクションで定義されたパラメータを使用します。