組態檔中的屬性替換
Solr 支援在組態檔中對屬性值進行變數替換,這允許在 solrconfig.xml
中執行時指定各種組態選項。
語法為 ${propertyname[:option default value]
}。這允許定義一個預設值,可以在啟動 Solr 時覆寫。如果未指定預設值,則必須在執行時指定屬性,否則在剖析組態檔時會產生錯誤。
有多種方法可以指定可在組態檔中使用的屬性。在以下方法中,強烈建議將「組態覆蓋」作為首選方法,因為它保持在 configset 的本機,且易於修改。
JVM 系統屬性
任何 JVM 系統屬性都可以在 Solr 的任何 XML 組態檔中用作變數。例如,在範例 solrconfig.xml
檔案中,您會看到此值,它定義要使用的鎖定類型
<lockType>${solr.lock.type:native}</lockType>
這表示鎖定類型預設為「native」,但當啟動 Solr 時,您可以使用 JVM 系統屬性來覆寫此值,方法是以
bin/solr start -Dsolr.lock.type=none
一般而言,您要設定的任何 Java 系統屬性都可以使用標準 -Dproperty=value
語法透過 bin/solr
腳本傳遞。
Solr 也會自動將任何以 SOLR_
開頭的環境變數對應到系統屬性,方法是將名稱轉換為小寫並將底線取代為 .
。這表示以 SOLR_LOCK_TYPE=none
啟動 Solr (或在 solr.in.sh
或 solr.in.cmd
中設定) 將會與先前的範例具有相同的效果。
或者,您可以將通用系統屬性新增至 Solr include 檔案 (bin/solr.in.sh
或 bin/solr.in.cmd
) 中定義的 SOLR_OPTS
環境變數。如需 Solr include 檔案運作方式的詳細資訊,請參閱:將 Solr 投入生產環境。
Config API 以覆寫 solrconfig.xml
Config API 允許您使用 API 來修改 Solr 的組態,特別是使用者定義的屬性。使用此 API 進行的變更會儲存在名為 configoverlay.json
的檔案中。此檔案應僅使用 API 進行編輯,但看起來會像這個範例
{
"userProps":{"update.autoCreateFields":"false"},
"requestHandler":{"/myterms":{
"name":"/myterms",
"class":"solr.SearchHandler",
"defaults":{
"terms":true,
"distrib":false},
"components":["terms"]}}}
如需更多詳細資訊,請參閱 Config API 章節。
core.properties 中使用者定義的屬性
每個 Solr 核心都有一個 core.properties
檔案,在使用 API 時會自動建立。當您建立 SolrCloud 集合時,您可以將參數名稱加上 property.name
作為參數,來傳遞自訂參數。
例如,要新增名為「my.custom.prop」的屬性
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=CREATE&name=gettingstarted&numShards=1&property.my.custom.prop=edismax
curl -X POST -H 'Content-type: application/json' -d '{"name": "gettingstarted", "numShards": 1, "properties": {"my.custom.prop": "edismax"}}' https://127.0.0.1:8983/api/collections
這會建立一個 core.properties
檔案,其中至少包含下列屬性 (為了簡潔起見,省略其他屬性)
#core.properties
name=gettingstarted
my.custom.prop=edismax
然後,my.custom.prop
屬性可以用作變數,例如在 solrconfig.xml
中
<requestHandler name="/select">
<lst name="defaults">
<str name="defType">${my.custom.prop}</str>
</lst>
</requestHandler>
隱含核心屬性
Solr 核心的數個屬性可以用作「隱含」屬性,這些屬性可用於變數替換,與基礎值的初始化位置或方式無關。
例如,無論特定 Solr 核心的名稱是在 core.properties
中明確設定,還是從執行個體目錄的名稱推斷而來,隱含屬性 solr.core.name
都可用於該核心組態檔中作為變數
<requestHandler name="/select">
<lst name="defaults">
<str name="collection_name">${solr.core.name}</str>
</lst>
</requestHandler>
所有隱含屬性都使用 solr.core.
名稱前置詞,並反映等效 core.properties
屬性的執行時值
-
solr.core.name
-
solr.core.config
-
solr.core.schema
-
solr.core.dataDir
-
solr.core.transient
-
solr.core.loadOnStartup