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://127.0.0.1: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/configsets
Solr コアの configset が見つかるディレクトリ。
maxBooleanClauses
-
オプション
デフォルト: *説明を参照*
クエリで許可される (ネストされた) 句の最大数を設定します。
このグローバル制限は、クエリ文字列で明示的に指定された句であろうと、インデックス内の用語に基づいたより複雑なタイプのクエリからのクエリ展開/書き換えの結果であろうと、任意のコレクションに対するクエリで許可される句の合計数に対する安全性の制約を提供します。この制限は、Lucene の複数のポイントで適用されます。これは、過剰な数の句を持つプリミティブクエリオブジェクト (主に
BooleanQuery
) が JVM ヒープを使い果たす可能性のある方法で構築されるのを防ぐだけでなく、過剰な *合計* 数のネストされた句を持つ複合クエリ (複数のプリミティブクエリで構成される) が検索スレッドに過剰な CPU を使用させる可能性のある方法で実行されないようにするためです。デフォルト構成では、このプロパティは、指定されている場合、
solr.max.booleanClauses
システムプロパティの値を使用します。これは、solrconfig.xml
の<maxBooleanClauses>
要素の_default
configset で使用されるシステムプロパティと同じであり、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>