組態檔中的屬性替換

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.shsolr.in.cmd 中設定) 將會與先前的範例具有相同的效果。

或者,您可以將通用系統屬性新增至 Solr include 檔案 (bin/solr.in.shbin/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