設定 solr.xml
solr.xml
檔案定義一些適用於所有或許多核心的全域設定選項。
本節將說明 Solr 隨附的預設 solr.xml
檔案,以及如何根據您的需求修改它。如需有關如何設定 core.properties
的詳細資訊,請參閱 核心探索 一節。
定義 solr.xml
您可以在 $SOLR_HOME
目錄 (通常是 server/solr
或 /var/solr/data
) 中找到 solr.xml
,或者在使用 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
類型的一個參數的建構函式。例如,<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>
會將自訂的管理處理器 (MyAdminHandler) 設定為處理管理請求。如果未設定此屬性,Solr 會使用預設的管理處理器
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
-
選用
預設值:請參閱說明
指定將分配多少個執行緒來平行重播更新。此集區由節點的所有核心共用。預設值等於處理器的數量。
indexSearcherExecutorThreads
-
選用
預設值:可用的處理器數量
指定將分配給搜尋查詢的執行緒數量。
coreRootDirectory
-
選用
預設值:
server/solr
核心探索樹的根目錄,預設為
$SOLR_HOME
。 coresLocator
-
選用
預設值:
org.apache.solr.core.CorePropertiesLocator
不需要設定此屬性。
如果使用此屬性,則應將其設定為實作
CoresLocator
的類別的 FQN(完整限定名稱),並且您必須提供一個帶有一個org.apache.solr.core.NodeConfig
類型參數的建構子。例如,<str name="coresLocator">com.myorg.CustomCoresLocator</str>
將會設定一個自訂的核心定位器。 coreSorter
-
選用
預設值:
org.apache.solr.core.CoreSorter
不需要設定此屬性。
如果使用此屬性,則應將其設定為實作
CoreSorter
的類別的 FQN(完整限定名稱),並且您必須提供一個帶有一個org.apache.solr.core.CoreContainer
類型參數的建構子。當 Solr 啟動時,此服務用於決定優先載入哪些核心。例如,<str name="coresLocator">com.myorg.CustomCoresLocator</str>
將會設定一個自訂的核心排序器。 managementPath
-
選用
預設值:無
目前無法運作。
sharedLib
-
選用
預設值:無
指定將在所有核心之間共用的通用程式庫目錄的路徑。此目錄中的任何 JAR 檔案都將新增到 Solr 外掛程式的搜尋路徑中。如果指定的路徑不是絕對路徑,則它將相對於
$SOLR_HOME
。自訂處理常式可以放在此目錄中。請注意,指定sharedLib
不會從 Solr 的類別路徑中移除$SOLR_HOME/lib
。 modules
-
選用
預設值:無
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.allowUrls
系統屬性在solr.in.sh
/solr.in.cmd
中設定。如果您需要為了向後相容性而停用此功能,您可以設定系統屬性solr.disable.allowUrls=true
。 hideStackTrace
-
選用
預設值:無
當此屬性設定為
true
時,Solr 在發生錯誤時不會在 HTTP 回應中傳回任何堆疊追蹤。預設情況下(false
),堆疊追蹤僅針對可預測的 Solr 例外狀況隱藏,但對於非預期的例外狀況(即:HTTP 500),則會傳回回應中。 shareSchema
-
選用
預設值:無
當此屬性設定為
true
時,可確保指向相同 Schema 資源檔案的多個核心將會參照相同的 IndexSchema 物件。共用 IndexSchema 物件可以加快核心載入速度。如果您使用此功能,請確保您的 Schema 檔案中沒有使用任何核心特定的屬性。 transientCacheSize
-
選用
預設值:無
從 9.2 版起已棄用。定義在卸載一個不再使用、但需要的新核心之前,可以載入多少個
transient=true
的 Solr 核心。 configSetBaseDir
-
選用
預設值:
$SOLR_HOME/configsets
可以在其中找到 Solr 核心設定集的目錄。
maxBooleanClauses
-
選用
預設值:請參閱說明
設定任何查詢中允許的最大(巢狀)子句數量。
此全域限制對任何集合的任何查詢中允許的子句總數提供了安全限制 - 無論這些子句是在查詢字串中明確指定,還是由於基於索引中詞語的更複雜查詢類型的查詢擴展/重寫所導致的結果。此限制在 Lucene 中的多個點強制執行,既是為了防止基本查詢物件(主要是
BooleanQuery
)建構具有過多的子句,而可能耗盡 JVM 堆積,也是為了確保沒有複合查詢(由多個基本查詢組成)可以執行過多的 *總* 巢狀子句,而可能導致搜尋執行緒使用過多的 CPU。在預設設定中,如果指定了此屬性,則會使用
solr.max.booleanClauses
系統屬性的值。這是_default
設定集中用於solrconfig.xml
的<maxBooleanClauses>
元素 的相同系統屬性,這使 Solr 管理員可以輕鬆地增加兩個值(在所有集合中),而無需搜尋和更新所有設定。<maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>
<solrcloud> 元素
此元素定義與 SolrCloud 相關的幾個參數。除非 Solr 執行個體是以 -DzkRun
或 -DzkHost
啟動,否則會忽略此區段
distribUpdateConnTimeout
-
選用
預設值:無
用於設定叢集內更新的基礎
connTimeout
。 distribUpdateSoTimeout
-
選用
預設值:無
用於設定叢集內更新的基礎
socketTimeout
。 host
-
選用
預設值:無
Solr 用於存取核心的主機名稱。
hostContext
-
選用
預設值:無
網址內容路徑。
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
毫秒當嘗試為分片選出領導者時,此屬性設定複本等待看到衝突狀態資訊被解決的最長時間;當進行滾動重新啟動時,特別是當託管監察者的節點重新啟動時,可能會發生暫時的狀態資訊衝突。
通常,預設值
180000
(ms) 足以解決衝突;如果您在 SolrCloud 中有數百或數千個小型集合,則可能需要增加此值。 zkClientTimeout
-
選用
預設值:無
連線到 ZooKeeper 伺服器的逾時。它與 SolrCloud 一起使用。
zkHost
-
選用
預設值:無
在 SolrCloud 模式下,Solr 應該用於叢集狀態資訊的 ZooKeeper 主機的 URL。
genericCoreNodeNames
-
選用
預設值:無
如果為
true
,則節點名稱不是基於節點的位址,而是基於識別核心的通用名稱。當不同的機器接管服務該核心時,會更容易理解。 zkCredentialsProvider
、zkACLProvider
和zkCredentialsInjector
-
選用
預設值:無
如果您使用ZooKeeper 存取控制,則可以指定的選用參數。
distributedClusterStateUpdates
-
選用
預設值:無
如果為
true
,則 SolrCloud 的內部行為會變更為不使用監察者來更新集合的state.json
,而是直接對 ZooKeeper 執行此操作。 minStateByteLenForCompression
-
選用
預設值:-1
可選參數,用於啟用透過網路傳輸和儲存在 Zookeeper 中的 state.json 壓縮。提供的值是壓縮 state.json 的最小位元組長度,即,任何位元組大小高於該大小的 state.json 都將被壓縮。預設值為 -1,表示 state.json 永遠不會壓縮。
stateCompressor
-
選用
預設值:org.apache.solr.common.util.ZLibCompressor
可選參數,用於為透過網路傳輸和儲存在 Zookeeper 中的 state.json 提供壓縮實作。提供的值是 state 壓縮要使用的類別。僅當 minStateByteLenForCompression 設定為高於 -1 的值時才使用。
<logging> 元素
class
-
選用
預設值:無
用於記錄的類別。對應的 JAR 檔案必須可供 Solr 使用,可能透過
solrconfig.xml
中的<lib>
指示。 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> 元素
可以在 solr.xml 中宣告一個或多個 clusterSingleton
元素。若要允許這樣做,必須將系統屬性 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[:選項預設值]}
。這允許定義一個在啟動 Solr 時可以覆蓋的預設值。如果未指定預設值,則必須在執行時指定該屬性,否則在解析時 solr.xml
檔案將會產生錯誤。
通常在使用啟動 JVM 時使用 -D
旗標指定的任何 JVM 系統屬性,都可以在 solr.xml
檔案中用作變數。
例如,在下面顯示的 solr.xml
檔案中,socketTimeout
和 connTimeout
值都設定為「60000」。但是,如果您使用 bin/solr start -DsocketTimeout=1000
啟動 Solr,則 HttpShardHandlerFactory
的 socketTimeout
選項將使用 1000 毫秒的值覆蓋,而 connTimeout
選項將繼續使用預設屬性值「60000」。
<solr>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:60000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
</solr>