Configsets API
Configsets API 讓您可以在 Solr 以 SolrCloud 模式執行時,將新的 configsets 上傳至 ZooKeeper、建立和刪除 configsets。
Configsets 是一組組態檔,例如 solrconfig.xml
、synonyms.txt
、schema、語言特定檔案和其他集合層級組態檔(所有通常位於 conf
目錄中的檔案)。Solr 隨附兩個範例 configsets(_default
和 sample_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>