Configsets API

Configsets API 讓您可以在 Solr 以 SolrCloud 模式執行時,將新的 configsets 上傳至 ZooKeeper、建立和刪除 configsets。

Configsets 是一組組態檔,例如 solrconfig.xmlsynonyms.txt、schema、語言特定檔案和其他集合層級組態檔(所有通常位於 conf 目錄中的檔案)。Solr 隨附兩個範例 configsets(_defaultsample_techproducts_configs),可用於建立集合。使用相同的概念,您可以建立自己的 configsets,並使其在建立集合時可用。

此 API 提供一種將組態檔上傳至 ZooKeeper,並在兩個或多個集合之間共用同一組組態檔的方式。

一旦 configset 上傳至 ZooKeeper,請在使用 Collections API 建立集合時使用 configset 名稱,集合將會使用您的組態檔。

如果使用此 API 上傳 configsets,則它們不一定要在集合之間共用,但如果希望的話,此 API 可讓您更容易共用。預先上傳 configsets 的替代方法是將組態檔放入 server/solr/configsets 下的目錄中,並在使用 bin/solr create 建立集合時使用目錄名稱作為 -d 參數。

此 API 只能在以 SolrCloud 模式執行的 Solr 上使用。如果您不是以 SolrCloud 模式執行 Solr,但仍想要使用共用組態,請參閱 Configsets 一節。

此 API 的運作方式是將命令傳遞至 configs 端點。端點的路徑會因使用的 API 而異:v1 API 使用 solr/admin/configs,而 v2 API 使用 api/cluster/configs。以下提供這兩種範例。

列出 Configsets

list 命令會擷取可在集合建立期間使用的 configsets 名稱。

  • V1 API

  • V2 API

使用 v1 API 時,list 命令必須大寫為 LIST

https://127.0.0.1:8983/solr/admin/configs?action=LIST&omitHeader=true

使用 v2 API 時,當請求沒有任何資料傳送時,會隱含 list 命令。

https://127.0.0.1:8983/api/cluster/configs?omitHeader=true

輸出會如下所示

{
  "configSets": [
    "_default",
    "techproducts",
    "gettingstarted"
  ]
}

上傳 Configset

上傳 configset,該 configset 會以 zip 壓縮檔案的形式傳送。單一非 zip 壓縮檔案也可以使用 filePath 參數上傳。

此功能預設為啟用,但可以透過執行階段參數 -Dconfigset.upload.enabled=false 停用。如果您想將 Solr 安裝公開給不受信任的使用者(即使您永遠不應該這樣做!),建議停用此功能。

如果啟用驗證且上傳作業是做為已驗證的請求執行,則會以「信任」模式上傳 configset。如果沒有驗證,則會以「不信任」模式上傳 configset。使用「不信任」configset 建立集合後,下列功能將無法運作:

  • 在請求處理期間無法使用 XSLT 轉換器 (tr 參數)。

  • 如果 configset 中有指定,則 ScriptUpdateProcessorFactory 將不會初始化。

  • 如果組態設定中使用了 <lib> 指令,則集合將不會初始化。(注意:添加到 Solr 類別路徑的程式庫不需要 <lib> 指令)

如果您使用任何這些參數或功能,您必須在 Solr 安裝中啟用安全性功能,並且您必須以經過身份驗證的使用者身份上傳組態設定。

並非所有檔案類型都支援在組態設定中使用。請參閱 configuration-guide:config-sets.adoc#forbidden-file-types 以取得更多資訊。

upload 命令接受下列參數

name

必填

預設值:無

上傳完成後要建立的組態設定。

overwrite

選填

預設值:請參閱說明

如果設定為 true,Solr 將會覆寫具有相同名稱的現有組態設定(如果為 false,則請求將會失敗)。如果提供 filePath,則此選項會指定是否應覆寫組態設定中指定的檔案(如果檔案已存在)。當使用 v1 API 時,預設值為 false,但當使用 v2 API 時,預設值為 true

cleanup

選填

預設值:false

當覆寫現有組態設定 (overwrite=true) 時,此參數會告知 Solr 刪除 ZooKeeper 中存在於舊組態設定中,但不存在於正在上傳的組態設定中的檔案。當使用 filePath 時,無法將此參數設定為 true。

filePath

選填

預設值:無

此參數允許將單一未壓縮的檔案上傳到 ZooKeeper 中組態設定下的指定路徑。此功能會遵循 overwrite 參數,因此如果指定的檔案路徑已存在於組態設定中,且 overwrite 設定為 false,則請求將會失敗。當使用 filePath 時,無法將 cleanup 參數設定為 true。

如果要上傳整個組態設定,則請求的主體應為包含組態設定的 zip 檔案。zip 檔案必須從 conf 目錄內建立(亦即,solrconfig.xml 必須是 zip 檔案中的最上層項目)。

以下是一個範例,說明如何建立名為「myconfig.zip」的 zip 檔案,並將其上傳為名為「myConfigSet」的組態設定

  • V1 API

  • V2 API

使用 v1 API 時,upload 命令必須大寫為 UPLOAD

$ (cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > myconfigset.zip

$ curl -X POST --header "Content-Type:application/octet-stream" --data-binary @myconfigset.zip "https://127.0.0.1:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"

也可以使用 Unix 管道以單一請求達成相同的目的

$ (cd server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) | curl -X POST --header "Content-Type:application/octet-stream" --data-binary @- "https://127.0.0.1:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"

使用 v2 API 時,要上傳的組態設定名稱會作為路徑參數提供

$ (cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > myconfigset.zip

$ curl -X PUT --header "Content-Type:application/octet-stream" --data-binary @myconfigset.zip
    "https://127.0.0.1:8983/api/cluster/configs/myConfigSet"

使用此 API,預設行為是覆寫現有的組態設定。可以使用參數 overwrite=false 停用此行為,在這種情況下,如果組態設定已存在,則請求將會失敗。

以下是一個範例,說明如何將單一檔案上傳到名為「myConfigSet」的組態設定

  • V1 API

  • V2 API

使用 v1 API 時,upload 命令必須大寫為 UPLOAD。要上傳的檔案名稱會透過 filePath 參數提供

curl -X POST --header "Content-Type:application/octet-stream"
    --data-binary @solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
    "https://127.0.0.1:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet&filePath=solrconfig.xml&overwrite=true"

使用 v2 API 時,組態設定和檔案的名稱都會在 URL 中提供。它們可以在 /cluster/configs/config_name/file_name 中替換。檔案名稱可以是巢狀的,並且包含 / 字元。

curl -X PUT --header "Content-Type:application/octet-stream"
    --data-binary @solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
    "https://127.0.0.1:8983/api/cluster/configs/myConfigSet/solrconfig.xml"

使用此 API,預設行為是覆寫組態設定中已存在的檔案。可以使用參數 overwrite=false 停用此行為,在這種情況下,如果檔案已存在於組態設定中,則請求將會失敗。

建立組態設定

create 命令會根據先前上傳的組態設定建立新的組態設定。

如果您尚未上傳任何組態設定,請參閱上方的「上傳組態設定」命令。

建立組態設定時支援以下參數。

name

必填

預設值:無

要建立的組態設定。

baseConfigSet

選填

預設值:_default

要複製為基礎的組態設定名稱。

configSetProp.property=value

選填

預設值:無

要覆寫複製的組態設定中來自基本組態設定的組態設定屬性。

例如,要根據先前定義的「predefinedTemplate」組態設定建立名為「myConfigset」的組態設定,並將不可變的屬性覆寫為 false。

  • V1 API

  • V2 API

使用 v1 API 時,create 命令必須大寫為 CREATE

https://127.0.0.1:8983/solr/admin/configs?action=CREATE&name=myConfigSet&baseConfigSet=predefinedTemplate&configSetProp.immutable=false&wt=xml&omitHeader=true

使用 v2 API 時,create 命令會作為包含必要參數的 JSON 資料的一部分提供

curl -X POST -H 'Content-type: application/json' -d '{
  "create":{
    "name": "myConfigSet",
    "baseConfigSet": "predefinedTemplate",
    "configSetProp.immutable": "false"}}'
    https://127.0.0.1:8983/api/cluster/configs?omitHeader=true

使用 v2 API 時,組態設定屬性也可以透過 properties 對應提供

curl -X POST -H 'Content-type: application/json' -d '{
  "create":{
    "name": "myConfigSet",
    "baseConfigSet": "predefinedTemplate",
    "properties": {
      "immutable": "false"
    }}}'
    https://127.0.0.1:8983/api/cluster/configs?omitHeader=true

輸出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">323</int>
  </lst>
</response>

刪除組態設定

delete 命令會移除組態設定。它不會移除使用組態設定建立的任何集合。

name

必填

預設值:無

要刪除的組態設定。

要刪除名為「myConfigSet」的組態設定

  • V1 API

  • V2 API

使用 v1 API 時,delete 命令必須大寫為 DELETE。要刪除的組態設定名稱會透過 name 參數提供

https://127.0.0.1:8983/solr/admin/configs?action=DELETE&name=myConfigSet&omitHeader=true

使用 v2 API 時,delete 命令會作為請求方法提供,例如 -X DELETE。要刪除的組態設定名稱會作為路徑參數提供

curl -X DELETE https://127.0.0.1:8983/api/cluster/configs/myConfigSet?omitHeader=true

輸出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">170</int>
  </lst>
</response>