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.cmdsolr.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>
hiddenSysProps

オプション

デフォルト: *説明を参照*

機密情報を隠すためにリダクトする必要がある sysProps に一致する正規表現パターンのカンマ区切りリスト。

許可リストは、solr.hiddenSysProps システムプロパティ、または SOLR_HIDDEN_SYS_PROPS 環境変数を介して構成することもできます。

デフォルトでは、Solr はすべての basicAuth、AWS、ZK、または SSL シークレット sysProps を非表示にします。「password」または「secret」が含まれる sysProp も非表示にします。

<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

ロギングを有効にするかどうか。

<logging><watcher> 要素

size

オプション

デフォルト: 50

バッファリングされるログイベントの数。

threshold

オプション

デフォルト: なし

特定のロギング実装が記録するロギングレベル。たとえば、Log4jを使用する場合、DEBUG、WARN、INFOなどを指定できます。

<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リクエストパラメータを使用して(デフォルトをオーバーライドして)指定することもできます。リクエストにdividendhashの両方が含まれている場合、ルーティングには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)を介してアプリケーションコードからアクセスできます。

ノードレベルキャッシュは個々のコアのコンテキストを超えて存在するため、コア/サーチャーのライフサイクルにフックする構成パラメータ(autowarmCountregeneratorなど)は、ノードレベルキャッシュには無関係であり/無視されることに注意してください。

<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ファイルでは、socketTimeoutconnTimeoutの値はそれぞれ「60000」に設定されています。ただし、bin/solr -DsocketTimeout=1000を使用してSolrを起動した場合、HttpShardHandlerFactorysocketTimeoutオプションは1000msの値を使用してオーバーライドされ、connTimeoutオプションは引き続きデフォルトのプロパティ値である「60000」を使用します。

<solr>
  <shardHandlerFactory name="shardHandlerFactory"
                       class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:60000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>
</solr>