solr.xml の設定
solr.xml ファイルは、すべてまたは多くのコアに適用されるいくつかのグローバル構成オプションを定義します。
このセクションでは、Solr に含まれているデフォルトの solr.xml ファイルと、ニーズに合わせて変更する方法について説明します。core.properties の設定方法の詳細については、「コアの検出」セクションを参照してください。
solr.xml の定義
solr.xml は $SOLR_HOME ディレクトリ (通常は server/solr または /var/solr/data) にあります。SolrCloud を使用している場合は、オプションで ZooKeeper にもあります。$SOLR_HOME/solr.xml が見つからない場合、Solr はデフォルトの solr.xml ファイルを使用します。
Zookeeper から solr.xml をロードすることは非推奨であり、将来のバージョンではサポートされなくなります。Solr のノード構成であるため、このファイルは起動時に利用可能である必要があり、ノード間で異なることも許可される必要があります。 |
デフォルトの solr.xml ファイルは $SOLR_TIP/server/solr/solr.xml にあり、次のようになっています。
<solr>
<int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
<str name="sharedLib">${solr.sharedLib:}</str>
<str name="modules">${solr.modules:}</str>
<str name="allowPaths">${solr.allowPaths:}</str>
<str name="allowUrls">${solr.allowUrls:}</str>
<str name="hideStackTrace">${solr.hideStackTrace:false}</str>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${solr.port.advertise:0}</int>
<str name="hostContext">${hostContext:solr}</str>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
<int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
<str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
<str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
<str name="zkCredentialsInjector">${zkCredentialsInjector:org.apache.solr.common.cloud.DefaultZkCredentialsInjector}</str>
<bool name="distributedClusterStateUpdates">${distributedClusterStateUpdates:false}</bool>
<bool name="distributedCollectionConfigSetExecution">${distributedCollectionConfigSetExecution:false}</bool>
<int name="minStateByteLenForCompression">${minStateByteLenForCompression:-1}</int>
<str name="stateCompressor">${stateCompressor:org.apache.solr.common.util.ZLibCompressor}</str>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:600000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
<metrics enabled="${metricsEnabled:true}">
<!--reporter name="jmx_metrics" group="core" class="org.apache.solr.metrics.reporters.SolrJmxReporter"/-->
</metrics>
</solr>
ご覧のとおり、検出 Solr 構成は「SolrCloud フレンドリー」です。ただし、<solrcloud> 要素が存在しても、Solr インスタンスが SolrCloud モードで実行されていることを意味するわけではありません。起動時に -DzkHost または -DzkRun が指定されていない限り、このセクションは無視されます。
solr.xml パラメータ
<solr> 要素
<solr> タグ (solr.xml のルート要素) で指定できる属性はありません。以下の表は、solr.xml の各 XML 要素の子ノードを示しています。
configSetService-
オプション
デフォルト:
configSetServiceこの属性を設定する必要はありません。
この属性を使用する場合、
ConfigSetServiceを継承するクラスの FQN (完全修飾名) に設定する必要があります。また、org.apache.solr.core.CoreContainer型の1つのパラメータを持つコンストラクタを提供する必要があります。たとえば、<str name="configSetService">com.myorg.CustomConfigSetService</str>のように指定します。この属性が設定されていない場合、Solr はデフォルトの
configSetServiceを使用します。この場合、ZooKeeper を使用する場合はorg.apache.solr.cloud.ZkConfigSetServiceを使用し、ZooKeeper を使用しない場合はorg.apache.solr.core.FileSystemConfigSetServiceを使用します。 adminHandler-
オプション
デフォルト:
org.apache.solr.handler.admin.CoreAdminHandlerこの属性を設定する必要はありません。
この属性を使用する場合、CoreAdminHandler を継承するクラスの FQN (完全修飾名) に設定する必要があります。たとえば、
<str name="adminHandler">com.myorg.MyAdminHandler</str>のように指定すると、カスタムの admin ハンドラ (MyAdminHandler) が admin リクエストを処理するように設定されます。この属性が設定されていない場合、Solr はデフォルトの admin ハンドラである
org.apache.solr.handler.admin.CoreAdminHandlerを使用します。 coreAdminHandlerActions-
オプション
デフォルト: なし
この属性を設定する必要はありません。
定義する場合、CoreAdminHandler 内に登録されるカスタムアクションのリストを含める必要があります。リストの各エントリは
str型である必要があり、エントリの名前はアクションの名前を定義し、値はCoreAdminOpを継承するアクションクラスの FQN (完全修飾名) です。たとえば、アクションは次のように定義できます
<coreAdminHandlerActions> <str name="foo">com.example.FooAction</str> <str name="bar">com.example.BarAction</str> </coreAdminHandlerActions>カスタムアクションを定義した後、それらの名前を使用して呼び出すことができます
https://:8983/solr/admin/cores?action=foo collectionsHandler-
オプション
デフォルト:
org.apache.solr.handler.admin.CollectionsHandler上記と同様に、カスタム CollectionsHandler 実装の場合。
infoHandler-
オプション
デフォルト:
org.apache.solr.handler.admin.InfoHandler上記と同様に、カスタム InfoHandler 実装の場合。
coreLoadThreads-
オプション
デフォルト: なし
コアを並列にロードするために割り当てるスレッドの数を指定します。
replayUpdatesThreads-
オプション
デフォルト: *説明を参照*
更新を並列にリプレイするために割り当てるスレッドの数を指定します。このプールはノードのすべてのコアで共有されます。デフォルト値はプロセッサ数と同じです。
coreRootDirectory-
オプション
デフォルト:
server/solrコア検出ツリーのルート。デフォルトは
$SOLR_HOMEです。 coresLocator-
オプション
デフォルト:
org.apache.solr.core.CorePropertiesLocatorこの属性を設定する必要はありません。
この属性を使用する場合、
CoresLocatorを実装するクラスの FQN (完全修飾名) に設定する必要があります。また、org.apache.solr.core.NodeConfig型の 1 つのパラメータを持つコンストラクタを提供する必要があります。たとえば、<str name="coresLocator">com.myorg.CustomCoresLocator</str>のように指定すると、カスタムのコアロケータが設定されます。 coreSorter-
オプション
デフォルト:
org.apache.solr.core.CoreSorterこの属性を設定する必要はありません。
この属性を使用する場合、
CoreSorterを実装するクラスの FQN (完全修飾名) に設定する必要があります。また、org.apache.solr.core.CoreContainer型の 1 つのパラメータを持つコンストラクタを提供する必要があります。このサービスは、Solr が最初にロードするコアに優先順位を付けるために使用されます。たとえば、<str name="coresLocator">com.myorg.CustomCoresLocator</str>のように指定すると、カスタムのコアソーターが設定されます。 managementPath-
オプション
デフォルト: なし
現在、非稼働です。
sharedLib-
オプション
デフォルト: なし
すべてのコアで共有される共通のライブラリディレクトリへのパスを指定します。このディレクトリ内の JAR ファイルは、Solr プラグインの検索パスに追加されます。指定されたパスが絶対パスでない場合は、
$SOLR_HOMEを基準とした相対パスになります。カスタムハンドラーをこのディレクトリに配置できます。sharedLibを指定しても、$SOLR_HOME/libが Solr のクラスパスから削除されないことに注意してください。 modules-
オプション
デフォルト: なし
起動時に有効にするバンドルされた Solr モジュールのリストを受け取ります。この方法でモジュールを追加すると、共有クラスローダーに追加され、Solr のすべてのコレクションで使用できるようになります。これは、
solrconfig.xmlの<lib>タグ (その1つのコレクションのみを対象とする) とは異なります。値の例:extracting,ltr。詳細については、Solr モジュールの章を参照してください。 allowPaths-
オプション
デフォルト: なし
Solr は通常、
$SOLR_HOME、$SOLR_DATA_HOME、またはcoreRootDirを基準としたフォルダにのみアクセスします。たとえば、これらのパスの外側にコアを作成する必要がある場合は、allowPathsでパスを明示的に許可できます。許可するファイルシステムパスのカンマ区切り文字列です。*の特殊な値を使用すると、システム上の任意のパスを許可します。
allowUrls-
オプション
デフォルト: *説明を参照*
許可する Solr ホストのカンマ区切りリスト。
HTTP/HTTPS プロトコルは省略できます。ホストとポートのみがチェックされます。例:
10.0.0.1:8983/solr,10.0.0.1:8984/solr。Solr をユーザー管理のクラスタとして実行し、
shardsパラメータを使用する場合は、ホストのリストを許可されるように明示的に構成する必要があります。そうしないと、Solr はリクエストを禁止します。SolrCloud モードでは、許可リストはクラスタ内のすべてのライブノードを含むように自動的に構成されます。
許可リストは、
solr.in.sh/solr.in.cmdのsolr.allowUrlsシステムプロパティを使用して構成することもできます。後方互換性のためにこの機能を無効にする必要がある場合は、システムプロパティsolr.disable.allowUrls=trueを設定できます。 hideStackTrace-
オプション
デフォルト: なし
この属性が
trueに設定されている場合、Solr はエラーが発生した場合に HTTP レスポンスでスタックトレースを返しません。デフォルト (false) では、スタックトレースは予測可能な Solr 例外に対してのみ非表示にされますが、予期しない例外 (つまり、HTTP 500) に対してはレスポンスで返されます。 shareSchema-
オプション
デフォルト: なし
この属性を
trueに設定すると、同じスキーマリソースファイルを指す複数のコアが同じ IndexSchema オブジェクトを参照することが保証されます。IndexSchema オブジェクトを共有すると、コアのロードが高速になります。この機能を使用する場合は、スキーマファイルでコア固有のプロパティが使用されていないことを確認してください。 transientCacheSize-
オプション
デフォルト: なし
9.2 から非推奨。
transient=trueの Solr コアが、必要に応じて未使用のコアをアンロードする前にロードできる数を定義します。 configSetBaseDir-
オプション
デフォルト:
$SOLR_HOME/configsetsSolr コアの configset が見つかるディレクトリ。
maxBooleanClauses-
オプション
デフォルト: *説明を参照*
クエリで許可される (ネストされた) 句の最大数を設定します。
このグローバル制限は、クエリ文字列で明示的に指定された句であろうと、インデックス内の用語に基づいたより複雑なタイプのクエリからのクエリ展開/書き換えの結果であろうと、任意のコレクションに対するクエリで許可される句の合計数に対する安全性の制約を提供します。この制限は、Lucene の複数のポイントで適用されます。これは、過剰な数の句を持つプリミティブクエリオブジェクト (主に
BooleanQuery) が JVM ヒープを使い果たす可能性のある方法で構築されるのを防ぐだけでなく、過剰な *合計* 数のネストされた句を持つ複合クエリ (複数のプリミティブクエリで構成される) が検索スレッドに過剰な CPU を使用させる可能性のある方法で実行されないようにするためです。デフォルト構成では、このプロパティは、指定されている場合、
solr.max.booleanClausesシステムプロパティの値を使用します。これは、solrconfig.xmlの<maxBooleanClauses>要素の_defaultconfigset で使用されるシステムプロパティと同じであり、Solr 管理者がすべての設定を検索して更新することなく、(すべてのコレクションで) 両方の値を簡単に増やすことができます。<maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
<solrcloud> 要素
この要素は、SolrCloud に関連するいくつかのパラメータを定義します。このセクションは、Solr インスタンスが -DzkRun または -DzkHost のいずれかで起動されていない場合は無視されます。
distribUpdateConnTimeout-
オプション
デフォルト: なし
クラスタ内更新の基になる
connTimeoutを設定するために使用されます。 distribUpdateSoTimeout-
オプション
デフォルト: なし
クラスタ内更新の基になる
socketTimeoutを設定するために使用されます。 host-
オプション
デフォルト: なし
Solr がコアにアクセスするために使用するホスト名。
hostContext-
オプション
デフォルト: なし
URL コンテキストパス。
hostPort-
オプション
デフォルト:
${solr.port.advertise:0}Solr がコアへのアクセスに使用し、liveNodes を介して Solr ノードの場所をアドバタイズするために使用するポート。このオプションは、Solr インスタンスが他のノードに接続させたいポートとは異なるポートでリッスンしている場合にのみ必要です。たとえば、Solr ノードがプロキシの背後で実行されている場合や、Kubernetes のようにポートマッピングを可能にするクラウド環境で実行されている場合などです。
hostPortは、Solr インスタンスが他のノードに接続させたいポートです。デフォルトの
solr.xmlファイルでは、これは${solr.port.advertise:0}に設定されています。solr.xmlを介してポートが渡されない場合 (つまり、0の場合)、Solr はデフォルトで jetty がリッスンしているポート (${jetty.port}で定義) になります。 leaderVoteWait-
オプション
デフォルト: なし
SolrCloud の起動時に、各 Solr ノードがシャードの既知のすべてのレプリカが見つかるまで待機し、報告されていないノードがダウンしていると見なすまでの時間。
leaderConflictResolveWait-
オプション
デフォルト:
180000ミリ秒シャードのリーダーを選出しようとする際、このプロパティは、レプリカが競合する状態情報が解決されるのを待機する最大時間を設定します。ローリング再起動を実行する場合、特に Overseer をホストするノードが再起動される場合、状態情報の競合が一時的に発生する可能性があります。
通常、デフォルト値の
180000(ミリ秒) は競合を解決するのに十分です。SolrCloud に数百または数千の小さなコレクションがある場合は、この値を増やす必要がある場合があります。 zkClientTimeout-
オプション
デフォルト: なし
ZooKeeper サーバーへの接続のタイムアウト。SolrCloud で使用されます。
zkHost-
オプション
デフォルト: なし
SolrCloud モードでは、Solr がクラスタ状態情報に使用する必要がある ZooKeeper ホストの URL。
genericCoreNodeNames-
オプション
デフォルト: なし
trueの場合、ノード名はノードのアドレスではなく、コアを識別する汎用名に基づきます。別のマシンがそのコアのサービスを引き継いだ場合、理解がはるかに簡単になります。 zkCredentialsProvider,zkACLProvider&zkCredentialsInjector-
オプション
デフォルト: なし
ZooKeeper アクセス制御を使用している場合に指定できるオプションのパラメータ。
distributedClusterStateUpdates-
オプション
デフォルト: なし
trueの場合、SolrCloud の内部動作は、コレクションのstate.json更新に Overseer を使用せず、ZooKeeper に対して直接これを行うように変更されます。 minStateByteLenForCompression-
オプション
デフォルト: -1
state.json の有線での圧縮および Zookeeper に格納された状態を有効にするためのオプションのパラメーター。指定された値は、state.json を圧縮する最小バイト長です。つまり、そのサイズ以上の state.json が圧縮されます。デフォルトは -1 であり、state.json は常に圧縮されないことを意味します。
stateCompressor-
オプション
デフォルト: org.apache.solr.common.util.ZLibCompressor
state.json の有線での圧縮および Zookeeper に格納された状態の実装を提供するオプションのパラメーター。指定された値は、状態の圧縮に使用するクラスです。これは、minStateByteLenForCompression が -1 を超える値に設定されている場合にのみ使用されます。
<logging> 要素
class-
オプション
デフォルト: なし
ロギングに使用するクラス。対応する JAR ファイルは、おそらく
solrconfig.xmlの<lib>ディレクティブを介して、Solr で使用可能である必要があります。 enabled-
オプション
デフォルト:
trueロギングを有効にするかどうか。
<shardHandlerFactory> 要素
カスタムシャードハンドラーを作成する場合は、solr.xmlで定義できます。
<shardHandlerFactory name="ShardHandlerFactory" class="qualified.class.name">
これはカスタムシャードハンドラーであるため、サブ要素は実装に固有です。Solrによって提供されるデフォルトであり、唯一のシャードハンドラーはHttpShardHandlerFactoryであり、その場合、次のサブ要素を指定できます。
socketTimeout-
オプション
デフォルト: *説明を参照*
クラスタ内クエリおよび管理リクエストの読み取りタイムアウト。デフォルトは、
<solrcloud>セクションで指定されたdistribUpdateSoTimeoutと同じです。 connTimeout-
オプション
デフォルト: *説明を参照*
クラスタ内クエリおよび管理リクエストの接続タイムアウト。デフォルトは、
<solrcloud>セクションで指定されたdistribUpdateConnTimeoutです。 urlScheme-
オプション
デフォルト: なし
分散検索で使用されるURLスキーム。
maxConnectionsPerHost-
オプション
デフォルト:
100000ホストごとに許可される最大接続数。
corePoolSize-
オプション
デフォルト:
0リクエストを処理するスレッドプールの初期コアサイズ。
maximumPoolSize-
オプション
デフォルト: なし
リクエストを処理するスレッドプールの最大サイズ。デフォルトは無制限です。
maxThreadIdleTime-
オプション
デフォルト:
5秒アイドル状態のスレッドがキューに残り、削除されるまでの秒数。
sizeOfQueue-
オプション
デフォルト: なし
スレッドプールがバッキングキューを使用する場合、直接ハンドオフに使用する最大サイズ。デフォルトはSynchronousQueueを使用することです。
fairnessPolicy-
オプション
デフォルト:
falseスレッドプールがスループットよりも公平性を優先するように構成するかどうかのブール値。
replicaRouting-
オプション
デフォルト: *説明を参照*
レプリカルーティングの優先順位構成を指定するNamedList。これは、レプリカルーティングの優先順位を選択および構成するために使用できます。
default=trueを使用して、デフォルトのベースレプリカルーティング優先順位を設定できます。正のデフォルトステータスアサーションのみが尊重されます。つまり、default=falseは効果がありません。明示的なデフォルトのベースレプリカルーティング優先順位が構成されていない場合、暗黙のデフォルトはrandomになります。
<shardHandlerFactory class="HttpShardHandlerFactory">
<lst name="replicaRouting">
<lst name="stable">
<bool name="default">true</bool>
<str name="dividend">routingDividend</str>
<str name="hash">q</str>
</lst>
</lst>
</shardHandlerFactory>
レプリカルーティングは、リクエストごとにshards.preferenceリクエストパラメータを使用して(デフォルトをオーバーライドして)指定することもできます。リクエストにdividendとhashの両方が含まれている場合、ルーティングにはdividendが優先されます。stableルーティングを構成する場合、hashパラメータは暗黙的にメインクエリパラメータ(つまりq)の文字列値のハッシュにデフォルト設定されます。
+ dividendパラメータは明示的に構成する必要があります。暗黙的なデフォルトはありません。dividendルーティングのみが必要な場合は、hashを空の文字列に明示的に設定して、暗黙的なハッシュベースのルーティングを完全に無効にすることができます。
<replicaPlacementFactory> 要素
デフォルトのレプリカ配置プラグインをsolr.xmlで定義できます。これを許可するには、solr.cluster.plugin.edit.enabledシステムプロパティをfalseに設定する必要があります。この設定により、/cluster/plugins編集APIが無効になり、実行時にクラスタープラグインが変更されるのを防ぎます。
<replicaPlacementFactory class="org.apache.solr.cluster.placement.plugins.AffinityPlacementFactory">
<int name="minimalFreeDiskGB">10</int>
<int name="prioritizedFreeDiskGB">200</int>
</replicaPlacementFactory>
class属性は、PlacementPluginFactoryを拡張するクラスのFQN(完全修飾名)に設定する必要があります。サブ要素は実装に固有です。
<clusterSingleton> 要素
1つ以上のclusterSingleton要素をsolr.xmlで宣言できます。これを許可するには、solr.cluster.plugin.edit.enabledシステムプロパティをfalseに設定する必要があります。この設定により、/cluster/plugins編集APIが無効になり、実行時にクラスタープラグインが変更されるのを防ぎます。
各clusterSingleton要素は、Solrの起動時にロードする必要があるクラスタープラグインと、それに関連する構成を指定します。
<clusterSingleton name="pluginName" class="qualified.plugin.class">
<int name="value1">20</int>
</clusterSingleton>
name属性は必須であり、各clusterSingletonで一意である必要があります。
class属性は、ClusterSingletonを拡張するクラスのFQN(完全修飾名)に設定する必要があります。サブ要素は実装に固有です。value1はここでの例として提供されています。
<metrics> 要素
solr.xmlの<metrics>要素を使用すると、Solrによってレポートされるメトリクスをカスタマイズできます。返すべきでないシステムプロパティを定義したり、カスタムのサプライヤーやレポーターを定義したりできます。
インストール環境のメトリクスをカスタマイズする場合は、メトリクス構成セクションを参照してください。
<caches> 要素
solr.xmlの<caches>要素は、名前付きノードレベルキャッシュの定義と構成をサポートします。
これらのキャッシュは、solrconfig.xmlのユーザー定義キャッシュに似ていますが、各名前付きキャッシュはノードレベルで長寿命のシングルトンとして存在します。これらのノードレベルキャッシュは、CoreContainer.getCache(String cacheName)を介してアプリケーションコードからアクセスできます。
ノードレベルキャッシュは個々のコアのコンテキストを超えて存在するため、コア/サーチャーのライフサイクルにフックする構成パラメータ(autowarmCountやregeneratorなど)は、ノードレベルキャッシュには無関係であり/無視されることに注意してください。
<solr>
<caches>
<cache name="myNodeLevelUserCache"
class="solr.CaffeineCache"
size="4096"
initialSize="1024" />
</caches>
</solr>
solr.xmlでのJVMシステムプロパティの置換
Solrは、solr.xmlでのJVMシステムプロパティ値の変数置換をサポートしており、さまざまな構成オプションのランタイム仕様を可能にします。構文は${propertyname[:option default value]}です。これにより、Solrの起動時にオーバーライドできるデフォルトを定義できます。デフォルト値が指定されていない場合、プロパティは実行時に指定する必要があり、指定しないと、solr.xmlファイルの解析時にエラーが生成されます。
通常、JVMの起動時に-Dフラグを使用して指定するJVMシステムプロパティは、solr.xmlファイルで変数として使用できます。
たとえば、以下に示すsolr.xmlファイルでは、socketTimeoutとconnTimeoutの値はそれぞれ「60000」に設定されています。ただし、bin/solr -DsocketTimeout=1000を使用してSolrを起動した場合、HttpShardHandlerFactoryのsocketTimeoutオプションは1000msの値を使用してオーバーライドされ、connTimeoutオプションは引き続きデフォルトのプロパティ値である「60000」を使用します。
<solr>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:60000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
</solr>