集合管理命令

集合是一個單一邏輯索引,使用單一 Solr 組態檔案 (solrconfig.xml) 和單一索引架構。

本節中的所有範例都假設您正在執行「techproducts」Solr 範例

bin/solr start -c -e techproducts

CREATE:建立集合

CREATE 動作用於建立新的資料集合。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=CREATE&name=techproducts_v2&collection.configName=techproducts&numShards=1

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

curl -X POST https://127.0.0.1:8983/api/collections -H 'Content-Type: application/json' -d '
  {
    "name": "techproducts_v2",
    "config": "techproducts",
    "numShards": 1
  }
'

CREATE 參數

CREATE 動作允許下列參數

name

必要

預設值:無

要建立的集合名稱。

router.name

選用

預設值:compositeId

將使用的路由器名稱。路由器定義文件如何在分片之間分配。可能的值為 implicitcompositeId

implicit 路由器不會自動將文件路由到不同的分片。您在索引請求上指示 (或在每個文件中) 的分片將用作這些文件的目的地。

compositeId 路由器會雜湊 uniqueKey 欄位中的值,並在集合的叢集狀態中查閱該雜湊,以決定哪個分片會接收文件,此外還具有手動導向路由的功能。

當使用 implicit 路由器時,需要 shards 參數。當使用 compositeId 路由器時,需要 numShards 參數。

如需詳細資訊,另請參閱 文件路由 一節。

numShards

選用

預設值:無

要建立為集合一部分的分片數目。當 router.namecompositeId 時,這是必要的參數。

shards (v1)、shardNames (v2)

選用

預設值:無

建立此集合時使用的分片名稱。當 router.nameimplicit 時,這是必要的參數。對於 v1 請求,這些會以單一逗號分隔的查詢參數提供,例如 shard-x,shard-y,shard-z。對於 v2 請求,分片名稱會以請求主體中的值清單提供,例如 ["shard-x", "shard-y", "shard-z"]

replicationFactor

選用

預設值:1

要為每個分片建立的副本數目。

這將會建立一個 NRT 類型的副本。如果您想要其他類型的副本,請參閱下方 tlogReplicaspullReplicas 參數。請參閱副本類型章節以取得更多關於副本類型的資訊。

nrtReplicas

選用

預設值:無

要為此集合建立的 NRT (近即時) 副本數量。此類型的副本會維護一個交易日誌,並在本機更新其索引。如果您希望所有副本都是此類型,您可以直接使用 replicationFactor 來代替。

tlogReplicas

選用

預設值:無

要為此集合建立的 TLOG 副本數量。此類型的副本會維護一個交易日誌,但僅透過從領導者進行複製來更新其索引。請參閱副本類型章節以取得更多關於副本類型的資訊。

pullReplicas

選用

預設值:無

要為此集合建立的 PULL 副本數量。此類型的副本不會維護交易日誌,僅透過從領導者進行複製來更新其索引。此類型不符合成為領導者的資格,且不應該是集合中唯一的副本類型。請參閱副本類型章節以取得更多關於副本類型的資訊。

createNodeSet (v1), nodeSet (v2)

選用

預設值:無

允許定義將新集合分散到的節點。對於 v1 請求,節點名稱會以單個逗號分隔的列表提供,例如 localhost:8983_solr,localhost:8984_solr,localhost:8985_solr。對於 v2 請求,節點名稱會以個別值的列表提供,例如 ["localhost:8983_solr", "localhost:7574_solr"]

如果未提供,CREATE 操作將使用叢集中的所有活動節點作為其節點集合。

或者,v1 請求允許使用特殊值 EMPTY 來初始建立新集合中沒有分片副本,然後稍後使用 ADDREPLICA 操作在需要時新增分片副本。v2 請求可以使用相同的 createReplicas 布林參數來實現此功能。

createReplicas (v2)

選用

預設值:true

控制 Solr 是否在建立集合操作的一部分為每個分片建立副本。(始終可以使用 ADDREPLICA 操作稍後建立副本。)

僅適用於 v2 請求。希望延遲副本建立的 v1 請求可以將 EMPTY 旗標值提供給 createNodeSet 參數。

createNodeSet.shuffle (v1), shuffleNodes (v2)

選用

預設值:true

控制為此集合建立的分片副本是否會以循序方式指派給 createNodeSet 指定的節點,或者是否應該在建立個別副本之前將節點列表隨機排序。

false 值會使集合建立的結果可預測,並能更精確地控制個別分片副本的位置,但是 true 可能是確保副本均勻分佈在各個節點上的更好選擇。

如果未同時指定 createNodeSet,則會忽略此參數。

collection.configName (v1), config (v2)

選用

預設值:無

定義要用於此集合的設定名稱 (必須已儲存在 ZooKeeper 中)。

如果未提供,Solr 將使用 _default 設定集的設定來建立一個新的(且可變的)名為 <collectionName>.AUTOCREATED 的設定集,並將其用於新的集合。當刪除此類集合時,如果沒有其他集合使用,則預設情況下會刪除其自動建立的設定集。

router.field (v1), router (v2)

選用

預設值:無

如果指定此參數,路由器將會查看輸入文件中欄位的值來計算雜湊值並識別分片,而不是查看 uniqueKey 欄位。如果指定欄位在文件中為 null,則會拒絕該文件。

請注意,即時取得或依文件 ID 檢索也需要 _route_ (或 shard.keys) 參數,以避免分散式搜尋。

perReplicaState

選用

預設值:false

如果為 true,個別副本的狀態將會維護為 state.json 的個別子項。

property.name=value

選用

預設值:無

將核心屬性 name 設定為 value。請參閱核心探索章節以了解支援的屬性和值的詳細資訊。這些屬性也適用於稍後將副本新增至集合時建立的每個新核心。

每個 core.properties 檔案中的項目對於 Solr 的正常運作至關重要。覆寫項目可能會導致集合無法使用。透過指定 property.name=value 來變更這些項目是一個專家級選項,只有在您徹底了解後果時才應使用。

waitForFinalState

選用

預設值:無

如果為 true,則請求將僅在所有受影響的副本變成活動狀態時完成。預設值為 false,這表示 API 將傳回單個動作的狀態,這可能是在新副本上線且處於活動狀態之前。

alias

選用

預設值:無

建立集合時,還可以建立指向此集合的別名。此參數允許指定此別名的名稱,有效地將此操作與 CREATEALIAS 結合。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

集合首先以讀寫模式建立,但可以使用 MODIFYCOLLECTION 動作將其置於 readOnly 模式。

CREATE 回應

回應將包含請求的狀態和新的核心名稱。如果狀態不是「成功」,則錯誤訊息會解釋請求失敗的原因。

RELOAD:重新載入集合

當您在 ZooKeeper 中變更設定檔時,例如上傳新的 solrconfig.xml,將會使用 RELOAD 動作。當變更某些透過 ZooKeeper 中的監看程式監控的檔案時,例如 security.json,Solr 會自動重新載入集合。但是,對於變更設定集中的檔案,例如上傳新的結構描述,您需要手動觸發 RELOAD。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=RELOAD&name=techproducts_v2

使用 v2 API 時,reload 命令會作為 URL 路徑的一部分提供。如果省略可選的 async 參數,則請求本文是可選的。

curl -X POST https://127.0.0.1:8983/api/collections/techproducts_v2/reload -H 'Content-Type: application/json' -d '
  {
    "async": "someAsyncId"
  }

RELOAD 參數

name

選用

預設值:無

要重新載入的集合名稱。此參數是必要的。它會以 v1 請求上的查詢參數形式出現,並以 v2 請求的 URL 路徑形式出現。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

RELOAD 回應

回應將包含請求的狀態和重新載入的核心。如果狀態不是「成功」,則錯誤訊息會解釋請求失敗的原因。

MODIFYCOLLECTION:修改集合的屬性

可以一次編輯多個屬性。變更這些值只會更新 ZooKeeper 上的 znode,不會變更集合的拓撲。例如,增加 replicationFactor 不會自動將更多副本新增至集合,但允許更多 ADDREPLICA 命令成功。

可以透過傳遞空值來刪除屬性。例如,yet_another_attribute_name= (沒有值) 會從集合中刪除 yet_another_attribute_name 參數。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=MODIFYCOLLECTION&collection=techproducts_v2&<attribute-name>=<attribute-value>&<another-attribute-name>=<another-value>&<yet_another_attribute_name>=

https://127.0.0.1:8983/solr/admin/collections?action=modifycollection&collection=techproducts_v2&replicationFactor=2

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

curl -X POST https://127.0.0.1:8983/api/collections/techproducts_v2 -H 'Content-Type: application/json' -d '
  {
    "modify": {
      "replicationFactor": 2
    }
  }
'

MODIFYCOLLECTION 參數

collection

必要

預設值:無

要修改的集合名稱。

attribute=value

必要

預設值:無

屬性名稱和屬性值的鍵值對。

至少需要一個 attribute 參數。

可以修改的屬性為

  • replicationFactor

  • collection.configName

  • readOnly

  • 其他使用 property. 字首的自訂屬性

    請參閱上方 CREATE 動作章節以了解這些屬性的詳細資訊。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

唯讀模式

readOnly 屬性設定為 true 會將集合置於唯讀模式,在唯讀模式下,任何索引更新請求都會被拒絕。在此模式下仍可使用其他集合層級動作(例如,新增/移除/移動副本)。

從(預設)讀寫模式轉換為唯讀模式包含下列步驟

  • 在集合狀態中變更 readOnly 旗標,

  • 任何新的更新請求都會被拒絕,並顯示 403 FORBIDDEN 錯誤碼(也會中止正在進行的長時間執行請求),

  • 執行強制提交以清除並提交任何正在進行的更新。

    如果背景中仍有大型區段合併正在執行,則這可能需要很長時間。
  • 執行集合 RELOAD 動作

移除 readOnly 屬性或將其設定為 false 會啟用更新處理並重新載入集合。

LIST:列出集合

擷取叢集中的集合名稱。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=LIST

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

curl -X GET https://127.0.0.1:8983/api/collections

輸出

{
  "responseHeader":{
    "status":0,
    "QTime":2011},
  "collections":["collection1",
    "example1",
    "example2"]}

RENAME:重新命名集合

重新命名集合會設定一個指向基礎集合的標準別名,以便現在可以使用新的名稱在查詢、索引和管理操作中引用相同的(未修改的)集合。

此命令實際上並不會重新命名基礎 Solr 集合 - 它會使用新名稱設定新的 1 對 1 別名,或重新命名現有別名,使其使用新名稱,同時仍參考相同的基礎 Solr 集合。但是,從使用者的角度來看,現在可以使用新名稱存取集合,並且新名稱也可以在其他別名中引用。

下列限制適用

  • 現有名稱必須是 SolrCloud 集合或指向單個集合的標準別名。不支援指向多個集合的別名。

  • 現有名稱不得為已路由的別名。

  • 目標名稱不得為現有的別名。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=RENAME&name=techproducts_v2&target=newName
curl -X POST https://127.0.0.1:8983/api/collections/techproducts/rename -H 'Content-Type: application/json' -d '
  {
    "to": "newName"
  }
'

RENAME 命令參數

name

必要

預設值:無

現有的 SolrCloud 集合名稱或指向單個集合且不是已路由別名的別名。

target (v1), to (v2)

必要

預設值:無

集合的目標名稱。這將是指向基礎 SolrCloud 集合的新別名。集合的原始名稱(或別名)也會在現有的別名中取代,以便它們也參考新名稱。目標名稱不得為現有的別名。

使用 RENAME 的範例

假設有兩個名為 collection1collection2 的實際 SolrCloud 集合,並且已存在下列別名

  • col1 ⇒ collection1:這會解析為 collection1

  • col2 ⇒ collection2:這會解析為 collection2

  • simpleAlias ⇒ col1:這會解析為 collection1

  • compoundAlias ⇒ col1,col2:這會解析為 collection1,collection2

col1 的 RENAME 重新命名為 foo 會將別名變更為下列

  • foo ⇒ collection1:這會解析為 collection1

  • col2 ⇒ collection2:這會解析為 collection2

  • simpleAlias ⇒ foo:這會解析為 collection1

  • compoundAlias ⇒ foo,col2:這會解析為 collection1,collection2

如果我們接著將 collection1(這是一個實際的集合名稱)重新命名為 collection2(這也是一個實際的集合名稱),則現在會存在以下別名

  • foo ⇒ collection2:這會解析為 collection2

  • col2 ⇒ collection2:這會解析為 collection2

  • simpleAlias ⇒ foo:這會解析為 collection2

  • compoundAlias ⇒ foo,col2:這現在會解析為 collection2,collection2,因此簡化為 collection2

  • collection1collection2:這個新建立的別名有效地將 collection1 從常規查詢和更新命令中隱藏,這些命令現在會導向 collection2

DELETE:刪除集合

DELETE 動作用於刪除集合。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETE&name=techproducts_v2
curl -X DELETE https://127.0.0.1:8983/api/collections/techproducts_v2

要非同步執行 DELETE,請附加 async 參數

curl -X DELETE https://127.0.0.1:8983/api/collections/techproducts_v2?async=aaaa

DELETE 參數

name

必要

預設值:無

要刪除的集合名稱。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

DELETE 回應

回應將包含請求的狀態和已刪除的核心。如果狀態不是「成功」,錯誤訊息將解釋請求失敗的原因。

輸出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">603</int>
  </lst>
  <lst name="success">
    <lst name="10.0.1.6:8983_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">19</int>
      </lst>
    </lst>
    <lst name="10.0.1.4:8983_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">67</int>
      </lst>
    </lst>
  </lst>
</response>

COLLECTIONPROP:集合屬性

新增、編輯或刪除集合屬性。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=COLLECTIONPROP&name=techproducts_v2&propertyName=propertyName&propertyValue=propertyValue

要建立或更新集合屬性

curl -X PUT https://127.0.0.1:8983/api/collections/techproducts_v2/properties/foo -H 'Content-Type: application/json' -d '
  {
    "value": "bar"
  }
'

要刪除現有的集合屬性

curl -X DELETE https://127.0.0.1:8983/api/collections/techproducts_v2/properties/foo

COLLECTIONPROP 參數

name (v1)

選用

預設值:無

要設定屬性的集合名稱。出現在 v2 請求的路徑中。

propertyName (v1)

選用

預設值:無

屬性的名稱。出現在 v2 請求的路徑中。

propertyValue (v1), value (v2)

選用

預設值:無

屬性的值。在 v1 請求中未提供時,將刪除該屬性。

COLLECTIONPROP 回應

回應將包含請求的狀態和已更新或移除的屬性。如果狀態不是「0」,錯誤訊息將解釋請求失敗的原因。

MIGRATE:將文件遷移到另一個集合

MIGRATE 命令用於將具有指定路由金鑰的所有文件遷移到另一個集合。來源集合將繼續擁有相同的資料,但它會開始將寫入請求重新路由到目標集合,持續時間由 forward.timeout 參數指定(以秒為單位)。使用者有責任在 MIGRATE 動作完成後,切換到目標集合進行讀取和寫入。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=MIGRATE&collection=techproducts_v2&split.key=key1!&target.collection=postMigrationCollection&forward.timeout=60
curl -X POST https://127.0.0.1:8983/api/collections/techproducts_v2 -H 'Content-Type: application/json' -d '
  {
    "migrate-docs": {
      "target": "postMigrationCollection",
      "splitKey": "key1!"
    }
  }
'

split.key 參數指定的路由金鑰可能會跨越來源集合和目標集合上的多個分片。遷移會在單一執行緒中逐個分片執行。此命令在「遷移」過程中可能會建立一個或多個臨時集合,但它們會在最後自動清除。

這是一個長時間執行的操作,因此強烈建議使用 async 參數。如果未指定 async 參數,則預設情況下該操作是同步的,建議在調用時保持較大的讀取逾時時間。即使使用較大的讀取逾時時間,請求仍可能逾時,但這並不一定表示操作失敗。使用者應在再次調用操作之前檢查記錄、叢集狀態、來源和目標集合。

此命令僅適用於使用 compositeId 路由器的集合。在 MIGRATE 命令執行期間,目標集合不得接收任何寫入,否則可能會遺失某些寫入。

請注意,MIGRATE API 不會對文件執行任何重複資料刪除,因此如果目標集合包含與遷移的文件具有相同 uniqueKey 的文件,則目標集合最終會包含重複的文件。

MIGRATE 參數

collection

必要

預設值:無

要從中分割文件的來源集合名稱。

target.collection (v1), target (v2)

必要

預設值:無

要將文件遷移到的目標集合名稱。

split.key (v1), splitKey (v2)

必要

預設值:無

路由金鑰前綴。例如,如果文件的 uniqueKey 是「a!123」,則您會使用 split.key=a!

forward.timeout (v1), forwardTimeout (v2)

選用

預設值:60

以秒為單位的逾時時間,在此時間之前,針對指定 split.key 向來源集合發出的寫入請求將會轉發到目標分片。

property.name=value

選用

預設值:無

將核心屬性名稱設定為。如需支援的屬性和值的詳細資訊,請參閱 核心探索 一節。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

MIGRATE 回應

回應將包含請求的狀態。

REINDEXCOLLECTION:重新索引集合

REINDEXCOLLECTION 命令使用來源集合中的現有資料重新索引集合。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=REINDEXCOLLECTION&name=techproducts_v2

我們目前沒有對應的 V2 版本。

重新索引可能是有損操作。某些現有索引資料(無法以儲存欄位的形式提供)可能會遺失,因此使用者應謹慎使用此命令,首先使用不同的來源和目標集合名稱評估潛在影響,並保留來源集合直到評估完成。

目標集合必須不存在(而且不能是別名)。如果目標集合名稱與來源集合相同,則首先會為目標集合產生唯一的循序名稱,然後在完成重新索引後,會建立一個別名,將來源名稱指向實際循序命名的目標集合。

開始重新索引時,來源集合會進入唯讀模式,以確保正確處理所有來源文件。

使用選用參數,可以為目標集合要求不同的索引綱要、集合形狀(分片數和複本數)或路由參數。

重新索引會以串流運算式精靈的形式執行,該精靈會在來源集合的其中一個複本上執行。它通常是一個耗時的操作,因此建議將其作為非同步請求執行,以避免請求逾時。針對指定的來源集合,一次只能執行一個重新索引操作。長時間執行、錯誤或當機的重新索引操作可以使用 abort 選項終止,該選項也會移除部分結果。

REINDEXCOLLECTION 參數

name

必要

預設值:無

來源集合名稱,可以是別名。

cmd

選用

預設值:start

目前支援的命令有

  • start:如果尚未執行,則開始處理。

  • abort:中止已執行的重新索引(或清除當機後的殘留狀態),並刪除部分結果。

  • status:傳回執行中重新索引命令的詳細狀態。

target

選用

預設值:無

目標集合名稱。如果未指定,將會產生唯一的名稱,並且在複製完所有文件後,會建立一個別名,將來源集合名稱指向唯一的循序命名集合。這有效地將原始來源集合從常規更新和搜尋操作中「隱藏」。

q

選用

預設值:*:*

選取要重新索引的文件的查詢。

fl

選用

預設值:*

要重新索引的欄位清單。

rows

選用

預設值:100

傳輸文件的批次大小。根據文件的平均大小,較大的批次大小可能會導致記憶體問題。

configName
collection.configName

選用

預設值:<來源集合的名稱>

目標集合的 configset 名稱。

removeSource

選用

預設值:false

如果為 true,則在成功完成處理後,將刪除來源集合。

async

選用

預設值:無

追蹤此動作的選用請求 ID,該動作將會非同步處理

此外,還有一些選用參數可決定目標集合的版面配置。如果未在請求中指定,則其值會從來源集合複製。目前支援下列參數(在 CREATE 集合 一節中詳細說明):numShardsreplicationFactornrtReplicastlogReplicaspullReplicasshardspolicycreateNodeSetcreateNodeSet.shufflerouter.*

重新索引程序完成後,目標集合會使用 property.rx: "finished" 標記,來源集合狀態會更新為讀寫。如有任何錯誤,該命令會刪除任何臨時集合和目標集合,並重設來源集合的唯讀旗標狀態。

使用 REINDEXCOLLECTION 的範例

輸入

https://127.0.0.1:8983/solr/admin/collections?action=REINDEXCOLLECTION&name=techproducts_v2&numShards=3&configName=conf2&q=id:aa*&fl=id,string_s

此請求指定目標集合的不同綱要、僅複製部分欄位、僅選取符合查詢的文件,並且還可能透過明確指定 3 個分片來重新塑造集合。由於未在參數中指定目標集合,因此將會建立具有唯一名稱的集合,例如,.rx_techproducts_v2_2,並且在成功時會建立一個別名,將 techproducts_v2 指向 .rx_techproducts_v2_2,從而有效地取代來源集合,用於索引和搜尋的目的。假設來源集合很小,因此發出了同步請求。

輸出

{
  "responseHeader":{
    "status":0,
    "QTime":10757},
  "reindexStatus":{
    "phase":"done",
    "inputDocs":13416,
    "processedDocs":376,
    "actualSourceCollection":".rx_techproducts_v2_1",
    "state":"finished",
    "actualTargetCollection":".rx_techproducts_v2_2",
    "checkpointCollection":".rx_ck_techproducts_v2"
  }
}

結果,已建立新的集合 .rx_techproducts_v2_2,並將選定的文件重新索引到 3 個分片,並建立一個別名,將 techproducts_v2 指向此集合。狀態還顯示來源集合已經是 .rx_techproducts_v2_1 的別名,這可能是先前重新索引的結果。

COLSTATUS:集合索引的詳細狀態

COLSTATUS 命令提供集合狀態的詳細描述,包括有關區段和欄位資料的低階索引資訊。沒有一個良好的對等 V2 API 支援下列所有參數。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=COLSTATUS&collection=techproducts_v2&coreInfo=true&segments=true&fieldInfo=true&sizeInfo=true

最接近的 V2 API 是這個,但不支援 V1 對等項的所有功能。

curl -X GET https://127.0.0.1:8983/api/collections/techproducts_v2

此命令還會檢查 Lucene 索引欄位類型是否符合目前的 Solr 集合綱要,並指出不符合規範的欄位名稱,也就是,其欄位類型與目前綱要中宣告的對應 Solr 欄位類型不相容(或不同)的 Lucene 欄位。此類不相容性可能是由不相容的綱要變更或將資料遷移到不同的主要 Solr 版本後造成的。

COLSTATUS 參數

collection

選用

預設值:無

集合名稱。如果遺失,則表示所有集合。

coreInfo

選用

預設值:false

如果為 true,則會提供有關分片領導者的 SolrCore 的其他資訊。

segments

選用

預設值:false

如果為 true,則會提供區段資訊。

fieldInfo

選用

預設值:false

如果為 true,則會提供詳細的 Lucene 欄位資訊及其對應的 Solr 綱要類型。

sizeInfo

選用

預設值:false

如果為 true,則會提供有關索引檔案大小及其 RAM 使用情況的其他資訊。

索引大小分析工具

COLSTATUS 命令也提供一個用於分析和估算原始索引資料組成的工具。請注意,應謹慎使用此工具,因為它會在所分析集合的所有分片領導者上產生大量的 IO 負載。可以調整取樣臨界值和取樣百分比參數,以在一定程度上降低此負載。

此工具產生的尺寸估計值僅為近似值,代表未壓縮索引資料的彙總大小。實際上,這些值永遠不會發生,因為 Lucene (和 Solr) 總是將資料以壓縮格式儲存 - 儘管如此,這些值仍有助於了解哪些項目佔用最多空間,以及索引中每種資料類型和每個欄位的相對大小。

在以下各節中,每當提及「大小」時,均表示未壓縮 (原始) 資料的估計彙總大小。

以下參數是此工具專有的

rawSize

選用

預設值:false

如果 true,則執行原始索引資料分析工具 (如果以下任何布林選項為 true,則表示此選項)。命令回應將包含顯示每個欄位和每個資料類型之資料大小估計細目的章節。

rawSizeSummary

選用

預設值:false

如果 true,則還會包含每個欄位和每個類型更詳細的資料大小細目。

rawSizeDetails

選用

預設值:false

如果 true,則提供詳盡的詳細資訊,其中包含每個欄位和每個類型的項目統計分佈,以及每個欄位中最大的前 20 個項目。

rawSizeSamplingPercent

選用

預設值:5.0

當索引大於特定閾值 (每個分片 10 萬個文件) 時,為了減少 IO 負載,實際上只會擷取並分析一部分資料,然後再推斷最終結果。

值必須大於 0 且小於或等於 100.0。非常小的值 (介於 0.01.0 之間) 可能會導致明顯的估計誤差。此外,如果值導致採樣的文件少於 10 個,則會因例外狀況而被拒絕。

此命令的回應一律包含兩個章節

  • fieldsBySize:一個映射,其中欄位名稱是鍵,而值是屬於該欄位的原始 (未壓縮) 資料的估計大小。此映射會依大小排序,以便輕鬆查看哪個欄位佔用最多空間。

  • typesBySize:一個映射,其中資料類型是鍵,而值是特定類型的原始 (未壓縮) 資料的估計大小。此映射也會依大小排序。

使用上述參數新增的可選章節包括

  • summary 章節,其中包含每個欄位依資料類型劃分的資料大小細目。

  • details 章節,其中包含每個欄位中每個資料類型的大小分佈的詳細統計摘要。本章節也會顯示每個欄位中依大小排序的 topN 值。

回應中顯示的資料類型可大致分為以下幾組

  • storedFields - 代表已儲存欄位中的原始未壓縮資料。例如,對於 UTF-8 字串,這表示字串的 UTF-8 表示法中位元組數的總和,對於長整數,這表示每個值 8 個位元組,依此類推。

  • terms_terms - 代表詞彙字典的彙總大小。此資料的大小受唯一詞彙的數量和長度影響,而這又取決於欄位大小和分析鏈。

  • terms_postings - 代表所有詞彙位置和偏移資訊 (如果存在) 的彙總大小。如果不需要以位置為基礎的搜尋 (例如片語查詢),則可能不存在此資訊。

  • terms_payloads - 代表所有每個詞彙酬載資料 (如果存在) 的彙總大小。

  • norms - 代表欄位標準化資訊的彙總大小。如果欄位在架構中具有 omitNorms 旗標,則可能會省略此資訊,這對於不需要依欄位長度加權或評分的欄位來說很常見。

  • termVectors - 代表詞彙向量的彙總大小。

  • docValues_* - 代表依類型劃分的 doc 值彙總大小 (例如,docValues_numericdocValues_binary 等)。

  • points - 代表點值的彙總大小。

COLSTATUS 回應

回應將包含集合狀態的概觀、作用中或非作用中分片和複本的數量,以及分片領導者的其他索引資訊。

使用 COLSTATUS 的範例

輸入

https://127.0.0.1:8983/solr/admin/collections?action=COLSTATUS&collection=gettingstarted&fieldInfo=true&sizeInfo=true

輸出

{
    "responseHeader": {
        "status": 0,
        "QTime": 50
    },
    "gettingstarted": {
        "znodeVersion": 16,
        "creationTimeMillis": 1706228861003,
        "properties": {
            "nrtReplicas": "2",
            "pullReplicas": "0",
            "replicationFactor": "2",
            "router": {
                "name": "compositeId"
            },
            "tlogReplicas": "0"
        },
        "activeShards": 2,
        "inactiveShards": 0,
        "schemaNonCompliant": [
            "(NONE)"
        ],
        "shards": {
            "shard1": {
                "state": "active",
                "range": "80000000-ffffffff",
                "replicas": {
                    "total": 2,
                    "active": 2,
                    "down": 0,
                    "recovering": 0,
                    "recovery_failed": 0
                },
                "leader": {
                    "coreNode": "core_node4",
                    "core": "gettingstarted_shard1_replica_n1",
                    "base_url": "http://192.168.0.80:8983/solr",
                    "node_name": "192.168.0.80:8983_solr",
                    "state": "active",
                    "type": "NRT",
                    "force_set_state": "false",
                    "leader": "true",
                    "segInfos": {
                        "info": {
                            "minSegmentLuceneVersion": "9.0.0",
                            "commitLuceneVersion": "9.0.0",
                            "numSegments": 40,
                            "segmentsFileName": "segments_w",
                            "totalMaxDoc": 686953,
                            "userData": {
                                "commitCommandVer": "1627350608019193856",
                                "commitTimeMSec": "1551962478819"
                            }
                        },
                        "fieldInfoLegend": [
                            "I - Indexed",
                            "D - DocValues",
                            "xxx - DocValues type",
                            "V - TermVector Stored",
                            "O - Omit Norms",
                            "F - Omit Term Frequencies & Positions",
                            "P - Omit Positions",
                            "H - Store Offsets with Positions",
                            "p - field has payloads",
                            "s - field uses soft deletes",
                            ":x:x:x - point data dim : index dim : num bytes"
                        ],
                        "segments": {
                            "_i": {
                                "name": "_i",
                                "delCount": 738,
                                "softDelCount": 0,
                                "hasFieldUpdates": false,
                                "sizeInBytes": 109398213,
                                "size": 70958,
                                "age": "2019-03-07T12:34:24.761Z",
                                "source": "merge",
                                "version": "9.0.0",
                                "createdVersionMajor": 9,
                                "minVersion": "9.0.0",
                                "diagnostics": {
                                    "os": "Mac OS X",
                                    "java.vendor": "Oracle Corporation",
                                    "java.version": "1.8.0_191",
                                    "java.vm.version": "25.191-b12",
                                    "lucene.version": "9.0.0",
                                    "mergeMaxNumSegments": "-1",
                                    "os.arch": "x86_64",
                                    "java.runtime.version": "1.8.0_191-b12",
                                    "source": "merge",
                                    "mergeFactor": "10",
                                    "os.version": "10.14.3",
                                    "timestamp": "1551962064761"
                                },
                                "attributes": {
                                    "Lucene50StoredFieldsFormat.mode": "BEST_SPEED"
                                },
                                "largestFiles": {
                                    "_i.fdt": "42.5 MB",
                                    "_i_Lucene80_0.dvd": "35.3 MB",
                                    "_i_Lucene50_0.pos": "11.1 MB",
                                    "_i_Lucene50_0.doc": "10 MB",
                                    "_i_Lucene50_0.tim": "4.3 MB"
                                }}}}}}}}}

使用原始索引資料分析工具的範例

輸入

https://127.0.0.1:8983/solr/admin/collections?action=COLSTATUS&collection=gettingstarted&rawSize=true&rawSizeSamplingPercent=0.1

輸出

{
    "responseHeader": {
        "status": 0,
        "QTime": 26812
    },
    "gettingstarted": {
        "znodeVersion": 33,
        "properties": {
            "nrtReplicas": "2",
            "pullReplicas": "0",
            "replicationFactor": "2",
            "router": {
                "name": "compositeId"
            },
            "tlogReplicas": "0"
        },
        "activeShards": 2,
        "inactiveShards": 0,
        "schemaNonCompliant": [
            "(NONE)"
        ],
        "shards": {
            "shard1": {
                "state": "active",
                "range": "80000000-ffffffff",
                "replicas": {
                    "total": 2,
                    "active": 2,
                    "down": 0,
                    "recovering": 0,
                    "recovery_failed": 0
                },
                "leader": {
                    "coreNode": "core_node5",
                    "core": "gettingstarted_shard1_replica_n2",
                    "base_url": "http://192.168.0.80:8983/solr",
                    "node_name": "192.168.0.80:8983_solr",
                    "state": "active",
                    "type": "NRT",
                    "force_set_state": "false",
                    "leader": "true",
                    "segInfos": {
                        "info": {
                            "minSegmentLuceneVersion": "9.0.0",
                            "commitLuceneVersion": "9.0.0",
                            "numSegments": 46,
                            "segmentsFileName": "segments_4h",
                            "totalMaxDoc": 3283741,
                            "userData": {
                                "commitCommandVer": "1635676266902323200",
                                "commitTimeMSec": "1559902446318"
                            }
                        },
                        "rawSize": {
                            "fieldsBySize": {
                                "revision.text": "7.9 GB",
                                "revision.text_str": "734.7 MB",
                                "revision.comment_str": "259.1 MB",
                                "revision": "239.2 MB",
                                "revision.sha1": "211.9 MB",
                                "revision.comment": "201.3 MB",
                                "title": "114.9 MB",
                                "revision.contributor": "103.5 MB",
                                "revision.sha1_str": "96.4 MB",
                                "revision.id": "75.2 MB",
                                "ns": "75.2 MB",
                                "revision.timestamp": "75.2 MB",
                                "revision.contributor.id": "74.7 MB",
                                "revision.format": "69 MB",
                                "id": "65 MB",
                                "title_str": "26.8 MB",
                                "revision.model_str": "25.4 MB",
                                "_version_": "24.9 MB",
                                "_root_": "24.7 MB",
                                "revision.contributor.ip_str": "22 MB",
                                "revision.contributor_str": "21.8 MB",
                                "revision_str": "15.5 MB",
                                "revision.contributor.ip": "13.5 MB",
                                "restrictions_str": "428.7 KB",
                                "restrictions": "164.2 KB",
                                "name_str": "84 KB",
                                "includes_str": "8.8 KB"
                            },
                            "typesBySize": {
                                "storedFields": "7.8 GB",
                                "docValues_sortedSet": "1.2 GB",
                                "terms_postings": "788.8 MB",
                                "terms_terms": "342.2 MB",
                                "norms": "237 MB",
                                "docValues_sortedNumeric": "124.3 MB",
                                "points": "115.7 MB",
                                "docValues_numeric": "24.9 MB",
                                "docValues_sorted": "18.5 MB"
                            }
                        }
                    }
                }
            },
            "shard2": {
                "state": "active",
                "range": "0-7fffffff",
                "replicas": {
                    "total": 2,
                    "active": 2,
                    "down": 0,
                    "recovering": 0,
                    "recovery_failed": 0
                },
                "leader": {
                    "coreNode": "core_node8",
                    "core": "gettingstarted_shard2_replica_n6",
                    "base_url": "http://192.168.0.80:8983/solr",
                    "node_name": "192.168.0.80:8983_solr",
                    "state": "active",
                    "type": "NRT",
                    "force_set_state": "false",
                    "leader": "true",
                    "segInfos": {
                        "info": {
                            "minSegmentLuceneVersion": "9.0.0",
                            "commitLuceneVersion": "9.0.0",
                            "numSegments": 55,
                            "segmentsFileName": "segments_4d",
                            "totalMaxDoc": 3284863,
                            "userData": {
                                "commitCommandVer": "1635676259742646272",
                                "commitTimeMSec": "1559902445005"
                            }
                        },
                        "rawSize": {
                            "fieldsBySize": {
                                "revision.text": "8.3 GB",
                                "revision.text_str": "687.5 MB",
                                "revision": "238.9 MB",
                                "revision.sha1": "212 MB",
                                "revision.comment_str": "211.5 MB",
                                "revision.comment": "201.7 MB",
                                "title": "115.9 MB",
                                "revision.contributor": "103.4 MB",
                                "revision.sha1_str": "96.3 MB",
                                "ns": "75.2 MB",
                                "revision.id": "75.2 MB",
                                "revision.timestamp": "75.2 MB",
                                "revision.contributor.id": "74.6 MB",
                                "revision.format": "69 MB",
                                "id": "67 MB",
                                "title_str": "29.5 MB",
                                "_version_": "24.8 MB",
                                "revision.model_str": "24 MB",
                                "revision.contributor_str": "21.7 MB",
                                "revision.contributor.ip_str": "20.9 MB",
                                "revision_str": "15.5 MB",
                                "revision.contributor.ip": "13.8 MB",
                                "restrictions_str": "411.1 KB",
                                "restrictions": "132.9 KB",
                                "name_str": "42 KB",
                                "includes_str": "41 KB"
                            },
                            "typesBySize": {
                                "storedFields": "8.2 GB",
                                "docValues_sortedSet": "1.1 GB",
                                "terms_postings": "787.4 MB",
                                "terms_terms": "337.5 MB",
                                "norms": "236.6 MB",
                                "docValues_sortedNumeric": "124.1 MB",
                                "points": "115.7 MB",
                                "docValues_numeric": "24.9 MB",
                                "docValues_sorted": "20.5 MB"
                            }
                        }
                    }
                }
            }
        }
    }
}

BACKUP:備份集合

將 Solr 集合和相關設定備份到「備份儲存庫」。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=BACKUP&name=techproducts_backup&collection=techproducts&location=file:///path/to/my/shared/drive
curl -X POST https://127.0.0.1:8983/api/collections/techproducts/backups/techproducts_backup/versions -H 'Content-Type: application/json' -d '
  {
    "location": "file:///path/to/my/shared/drive"
  }
'

BACKUP API 將備份指定集合的 Solr 索引和設定。BACKUP 命令會從每個分片中取得一份副本以取得索引。對於設定,它會備份與集合和中繼資料相關聯的 configset。

Solr 隨附許多儲存庫的備份支援。請參閱備份儲存儲存庫章節以取得完整清單。

備份資料會根據提供的 namelocation 儲存在指定儲存庫中的目錄中。每個備份位置可以為同一個集合保留多個備份,讓使用者稍後可以根據需要從任何這些「備份點」還原。在位置內會以增量方式完成備份,因此會略過先前上傳的索引檔案,且不會在備份儲存庫中重複。多個集合無法備份到相同位置。

先前版本的 Solr 支援不同的備份檔案格式,其中缺少上述的增量支援。Solr 仍然可以從使用此舊格式的備份還原,但不建議建立此格式的新備份,且正式將其棄用。請參閱下方的 incremental 參數以取得更多資訊。

BACKUP 參數

collection

必要

預設值:無

要備份的集合名稱。以 v1 要求的查詢參數提供,並以 v2 要求的路徑區段提供。

name

必要

預設值:無

要建立的備份名稱。以 v1 要求的查詢參數提供,或以 v2 要求的路徑區段提供。

對於增量備份,應重複使用備份名稱,以將新的備份點新增至現有的備份。對於非增量備份 (已棄用),會檢查此名稱以確保它尚未存在,如果存在,則會引發錯誤訊息。

location

必要

預設值:無

共用磁碟機上用於備份命令寫入的位置。除非在儲存庫設定上定義預設位置,或設定為 叢集屬性,否則此參數為必要參數。

如果位置路徑位於已掛接的磁碟機上,則即使監督者節點未託管要備份的集合複本,也必須在充當監督者的節點上提供掛接。由於任何節點都可以在任何時間擔任監督者角色,因此避免可能發生備份失敗的最佳做法是確保掛接點在叢集的所有節點上都可用。

每個備份位置只能保留一個集合的備份,但是相同的位置可以用於重複備份相同集合。相同集合的重複備份會以增量方式完成,因此自上次備份以來未變更的檔案不會在備份儲存庫中重複。

如果您使用的是 S3 備份儲存庫,則請閱讀有關 location 選項的 S3 特定警告。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

repository

選用

預設值:無

要用於備份的儲存庫名稱。如果未指定任何儲存庫,則會自動使用本機檔案系統儲存庫。

maxNumBackupPoints

選用

預設值:無

備份位置應保留的備份數量的上限。如果目前數字超過此上限,則會刪除較舊的備份,直到僅剩下 maxNumBackupPoints 個備份。如果指定 incremental=false,則此參數無效。

backupConfigset

選用

預設值:true

指出是否應將 configset 檔案包含在索引備份中。請注意,若要還原集合,configset 必須存在於 ZooKeeper 中,或是備份的一部分。只有在您可以透過 Solr 外部的其他方式還原 configset 時,才應將此項設定為 false (亦即,您已將其與應用程式原始程式碼一起儲存、是 ZooKeeper 備份的一部分等等)。

property.<propertyName> (V1)、extraProperties (V2)

選用

預設值:無

允許儲存與備份相關的自訂資訊的其他鍵/值組。在 v2 中,值為鍵/值組的映射。

incremental

選用

預設值:true

一個布林參數,允許使用者選擇是要建立增量 (incremental=true) 或「完整」 (incremental=false) 備份。如果未指定,則預設會以增量方式完成備份。在所有已知情況下,最好使用增量備份,並且「完整」(亦即非增量) 備份已棄用,因此只有在仔細考慮過後,才應使用此參數。

indexBackup (v1)、backupStrategy (v2)

選用

預設值:「copy-files」

一個字串參數,允許使用者指定數種不同的備份「策略」之一。有效的選項為 copy-files (備份集合 configset 和索引資料) 和 none (僅備份集合 configset)。

commitName (v1)、snapshotName (v2)

選用

預設值:無

要從中建立備份的集合「快照」名稱。如果未提供,Solr 會從目前的集合狀態建立備份 (而非先前的快照狀態)。

  • 增量備份回應

{
    "response": {
        "collection": "techproducts",
        "numShards": 2,
        "backupId": 0,
        "indexVersion": "9.0.0",
        "startTime": "2022-02-11T17:20:44.157305500Z",
        "indexFileCount": 22,
        "uploadedIndexFileCount": 22,
        "indexSizeMB": 0.007,
        "uploadedIndexFileMB": 0.007,
        "shardBackupIds": [
            "md_shard2_0",
            "md_shard1_0"
        ],
        "endTime": "2022-02-11T17:20:45.245534400Z"
    }
}

LISTBACKUP:列出備份

列出儲存在指定儲存庫位置的每個備份的相關資訊。傳回每個備份的基本中繼資料,包括:建立備份的時間戳記、用於建立索引的 Lucene 版本,以及備份的大小 (以檔案數量和總檔案大小計)。

先前版本的 Solr 支援不同的備份檔案結構,該結構不支援在相同位置儲存多個備份。Solr 仍然可以還原以這種舊格式儲存的備份,但是它已棄用,並將在後續版本的 Solr 中移除。LISTBACKUP API 不支援已棄用的格式,並且嘗試在保留較舊備份的位置使用此 API 將會導致錯誤訊息。

Solr 在內部用來表示備份的檔案結構在 8.9.0 中已變更。雖然仍然可以還原在此格式變更之前建立的備份,但是 LISTBACKUPDELETEBACKUP API 命令僅在新格式上有效。嘗試在保留較舊備份的位置使用它們將會導致錯誤訊息。

LISTBACKUP 參數

name

必要

預設值:無

要列出的備份名稱。備份名稱通常對應於集合名稱,但並非必要。

location

必要

預設值:無

要從中列出備份的儲存庫位置。除非在儲存庫設定上定義預設位置,或設定為 叢集屬性,否則此參數為必要參數。

如果位置路徑位於已掛接的磁碟機上,則即使監督者節點未託管要備份的集合複本,也必須在充當監督者的節點上提供掛接。由於任何節點都可以在任何時間擔任監督者角色,因此避免可能發生備份失敗的最佳做法是確保掛接點在叢集的所有節點上都可用。

這必須與建立備份時所提供的 location 選項的值相同。

repository

選用

預設值:無

要用於存取備份資訊的儲存庫名稱。如果未指定任何儲存庫,則會自動使用本機檔案系統儲存庫。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

LISTBACKUP 範例

輸入

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=LISTBACKUP&name=myBackupName&location=/path/to/my/shared/drive
curl -X GET "https://127.0.0.1:8983/api/backups/backupName/versions?location=/path/to/my/shared/drive"

輸出

{
  "responseHeader":{
    "status":0,
    "QTime":4},
  "collection":"books",
  "backups":[{
      "indexFileCount":0,
      "indexSizeMB":0.0,
      "shardBackupIds":{
        "shard2":"md_shard2_0.json",
        "shard1":"md_shard1_0.json"},
      "collection.configName":"books",
      "backupId":0,
      "collectionAlias":"books",
      "startTime":"2021-02-09T03:19:52.085653Z",
      "indexVersion":"9.0.0"},
    {
      "indexFileCount":0,
      "indexSizeMB":0.0,
      "shardBackupIds":{
        "shard2":"md_shard2_1.json",
        "shard1":"md_shard1_1.json"},
      "collection.configName":"books",
      "backupId":1,
      "collectionAlias":"books",
      "startTime":"2021-02-09T03:19:52.268804Z",
      "indexVersion":"9.0.0"}]}

RESTORE:還原集合

將 Solr 索引和相關設定還原至指定的集合。

  • V1 API

  • V2 API

curl -X GET https://127.0.0.1:8983/solr/admin/collections?action=RESTORE&name=techproducts_backup&location=file:///path/to/my/shared/drive&collection=techproducts_v3&nrtReplicas=2&createNodeSet=node1,node2&property.foo=bar
curl -X POST https://127.0.0.1:8983/api/backups/techproducts_backup/restore -H 'Content-Type: application/json' -d '
  {
      "collection": "techproducts_v3",
      "location": "file:///path/to/my/shared/drive",
      "create-collection": {
        "nrtReplicas": 2,
        "nodeSet": ["node1", "node2"],
        "properties": {
          "foo": "bar"
        }
      }
  }
'

RESTORE 操作會將集合的內容替換為指定備份中的檔案。

如果提供的 collection 值與現有的集合相符,Solr 將會使用它進行還原,前提是它與儲存的備份檔案相容(相同的分片數等)。如果提供的 collection 值不存在,則會建立一個與儲存的備份檔案相容的新集合,其名稱與該值相同。建立的集合將具有與原始集合相同的分片數和副本數,並保留路由資訊等。您可以選擇性地覆寫一些參數(請參閱下文)。

在還原時,如果 ZooKeeper 中存在同名的 configset,Solr 將會重複使用該 configset,否則將在 ZooKeeper 中上傳備份的 configset 並使用它。

您可以使用集合 CREATEALIAS 命令,以確保用戶端不需要變更端點來查詢或針對新還原的集合建立索引。

RESTORE 參數

collection

必要

預設值:無

索引將還原至其中的集合。此參數為必要參數。

name

必要

預設值:無

您要還原的現有備份的名稱。此參數為必要參數。以 v1 請求的查詢參數形式提供,並以 v2 請求的 URL 路徑形式提供。

location

選用

預設值:無

RESTORE 命令從備份儲存庫內讀取的位置。或者,可以將其設定為 叢集屬性。+

這必須與建立備份時所提供的 location 選項的值相同。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

repository

選用

預設值:無

要用於備份的儲存庫名稱。如果未指定任何儲存庫,則會自動使用本機檔案系統儲存庫。

backupId

選用

預設值:無

要從中還原的特定備份點的 ID。

備份位置可以存放同一個集合的多個備份。此參數允許使用者選擇應該使用哪個備份來進行還原。如果未指定,則會使用最近的備份點。

可覆寫參數

此外,使用者可以提供一些集合建立參數,以在要還原至的集合尚不存在時使用。這些參數包括:collection.configNamecreateNodeSet(不支援 EMPTY)、createNodeSet.shufflenrtReplicasproperty.name=value(即,任意集合屬性)、pullReplicasreplicationFactortlogReplicas

請參閱集合建立文件,以取得有關每個參數的更多資訊以及有關其 v1 或 v2 特定語法的詳細資訊。

DELETEBACKUP:從遠端儲存庫刪除備份檔案

刪除儲存在指定儲存庫位置的備份檔案。

先前版本的 Solr 支援不同的備份檔案結構,該結構不支援在相同位置儲存多個備份。Solr 仍然可以還原以此舊格式儲存的備份,但此格式已過時,將在後續版本的 Solr 中移除。DELETEBACKUP API 不支援已過時的格式,並且嘗試在保存舊備份的位置上使用此 API 將導致錯誤訊息。

Solr 允許在任何給定的邏輯「位置」儲存同一集合的多個備份。每個備份點都會給定一個識別碼(backupId),可以使用此識別碼透過此 API 個別刪除它們。或者,可以告知 Solr 保留最後 maxNumBackupPoints 個備份,刪除給定位置的所有其他備份。以這些方式刪除備份點可能會遺留任何備份點都不再引用的索引檔案。可以使用 purgeUnused 選項偵測並刪除這些遺留的檔案。

或者,Solr 的 v2 API 為每個備份刪除機制提供單獨的 API 端點。請參閱下方的範例和參數說明以取得更多資訊。

DELETEBACKUP 範例

依備份 ID 刪除

輸入

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETEBACKUP&name=myBackupName&location=/path/to/my/shared/drive&backupId=0
curl -X DELETE "https://127.0.0.1:8983/api/backups/myBackupName/versions/0?location=/path/to/my/shared/drive"

輸出

{
  "responseHeader":{
    "status":0,
    "QTime":940},
  "deleted":[[
      "startTime","2021-02-09T03:19:52.085653Z",
      "backupId",0,
      "size",28381,
      "numFiles",53]],
  "collection":"books"}

刪除除了最近 N 個備份以外的所有備份

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETEBACKUP&name=myBackupName&location=/path/to/my/shared/drive&maxNumBackupsPoints=2
curl -X DELETE "https://127.0.0.1:8983/api/backups/myBackupName/versions?retainLatest=2&location=/path/to/my/shared/drive"

「垃圾收集」未使用的檔案

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETEBACKUP&name=myBackupName&location=/path/to/my/shared/drive&purgeUnused=true
curl -X PUT -H "Content-type: application/json" "https://127.0.0.1:8983/api/backups/myBackupName/purgeUnused" '
  {
    "location": "/path/to/my/shared/drive"
  }
'

DELETEBACKUP 參數

name

必要

預設值:無

要從中刪除備份檔案的備份名稱。在 v1 請求中以查詢參數形式提供,在 v2 請求中以路徑參數形式提供。

location

必要

預設值:無

要從中刪除備份的儲存庫位置。此參數為必要參數,除非在儲存庫設定中定義了預設位置,或是設定為 叢集屬性

如果位置路徑位於已掛接的磁碟機上,則即使監督者節點未託管要備份的集合複本,也必須在充當監督者的節點上提供掛接。由於任何節點都可以在任何時間擔任監督者角色,因此避免可能發生備份失敗的最佳做法是確保掛接點在叢集的所有節點上都可用。

這必須與建立備份時所提供的 location 選項的值相同。

repository

選用

預設值:無

要用於刪除備份檔案的儲存庫的名稱。如果未指定儲存庫,則會自動使用本機檔案系統儲存庫。

backupId

選用

預設值:無

明確指定要刪除的單個備份 ID。每個 v1 DELETEBACKUP 請求只能指定 backupIdmaxNumBackupPointspurgeUnused 其中之一。在 v1 請求中以查詢參數形式提供,在 v2 請求中以路徑參數形式提供。

maxNumBackupPoints (v1),retainLatest (v2)

選用

預設值:無

待辦事項 指定應保留多少備份,並刪除所有其他備份。每個 DELETEBACKUP 請求只能指定 backupIdmaxNumBackupPointspurgeUnused 其中之一。

purgeUnused

選用

預設值:無

如果刪除了引用它們的備份,Solr 的增量備份支援可能會遺留檔案。purgeUnused 旗標參數會觸發掃描以偵測這些遺留檔案並刪除它們。在相同位置重複執行備份的管理員應規劃零星地使用此參數以回收磁碟空間。每個 v1 DELETEBACKUP 請求只能指定 backupIdmaxNumBackupPointspurgeUnused 其中之一。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

REBALANCELEADERS:重新平衡領導者

根據作用中節點的 preferredLeader 屬性重新指派集合中的領導者。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=REBALANCELEADERS&collection=techproducts

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

curl -X POST https://127.0.0.1:8983/api/collections/techproducts -H 'Content-Type: application/json' -d '
  {
    "rebalance-leaders": {
      "maxAtOnce": 3
    }
  }
'

根據作用中節點上的 preferredLeader 屬性指派集合中的領導者。應該在透過 BALANCESHARDUNIQUE 或 ADDREPLICAPROP 命令指派 preferredLeader 屬性之後執行此命令。

並非集合中的所有分片都必須具有 preferredLeader 屬性。重新平衡只會嘗試將領導權重新指派給 preferredLeader 屬性設定為 true並且目前不是分片領導者目前處於作用中狀態的副本。

REBALANCELEADERS 參數

collection

必要

預設值:無

要重新平衡 preferredLeaders 的集合的名稱。

maxAtOnce

一次要排隊的最大重新指派數量。值 <=0 時使用預設值 Integer.MAX_VALUE。

達到此數字時,該程序會等待一個或多個領導者成功指派,然後再將更多領導者新增至佇列。

maxWaitSeconds

選用

預設值:60

等待重新指派領導者的逾時時間。如果 maxAtOnce 小於將發生的重新指派數量,則這是任何單個等待至少一次重新指派的最長間隔。

例如,如果要進行 10 次重新指派,且 maxAtOnce1,而 maxWaitSeconds60,則該命令可能等待的最長時間上限為 10 分鐘。

REBALANCELEADERS 回應

回應將包含請求的狀態。狀態為「0」表示請求已處理,而不是所有指派都成功。請檢查「摘要」章節以取得該資訊。

使用 REBALANCELEADERS 的範例

輸入

這些命令中的任何一個都會導致所有設定了 preferredLeader 屬性且不是已成為領導者的作用中副本成為領導者。

https://127.0.0.1:8983/solr/admin/collections?action=REBALANCELEADERS&collection=collection1&wt=json

https://127.0.0.1:8983/solr/admin/collections?action=REBALANCELEADERS&collection=collection1&maxAtOnce=5&maxWaitSeconds=30&wt=json

輸出

在此範例中

  • 在「alreadyLeaders」章節中,core_node5 已經是領導者,因此 shard1 的領導權沒有任何變更。

  • 在「inactivePreferreds」章節中,core_node57 設定了 preferredLeader 屬性,但節點未處於作用中狀態,shard7 的領導者未變更。這被視為成功。

  • 在「successes」章節中,core_node23 不是 shard3 的領導者,因此將領導權指派給了該副本。

具有「Success」標籤的「摘要」章節表示該命令根據需要重新平衡了所有具有 preferredLeader 屬性的作用中副本。如果副本由於不健全(例如,位於未執行的 Solr 執行個體上)而無法成為領導者,則也視為成功。

{
  "responseHeader":{
    "status":0,
    "QTime":3054},
  "Summary":{
    "Success":"All active replicas with the preferredLeader property set are leaders"},
  "alreadyLeaders":{
    "core_node5":{
      "status":"skipped",
      "msg":"Replica core_node5 is already the leader for shard shard1. No change necessary"}},
  "inactivePreferreds":{
    "core_node57":{
      "status":"skipped",
      "msg":"Replica core_node57 is a referredLeader for shard shard7, but is inactive. No change necessary"}},
  "successes":{
    "shard3":{
      "status":"success",
      "msg":"Successfully changed leader of slice shard3 to core_node23"}}}

在發出此呼叫後檢查叢集狀態,應顯示每個具有 preferredLeader 屬性的作用中副本也都將「leader」屬性設定為 true

NRT 領導者所做的額外工作非常少,而且僅在建立索引時出現。主要用例是在少量節點上集中大量領導者時重新分配領導者角色。除非領導者角色的不平衡以 10 的倍數衡量,否則重新平衡可能不會提高效能。
分配 preferredLeader 屬性的 BALANCESHARDUNIQUE 命令不保證完美分配,在某些集合拓撲中,不可能做出該保證。

CREATESNAPSHOT:建立集合的快照

Solr 支援建立集合「快照」,這種快照會以允許使用者在稍後需要時還原到該點的方式「檢查點」集合狀態。這在重新建立索引或對集合進行組態變更之前特別有用。

與將集合資料複製到磁碟外的備份不同,快照本身在發生磁碟或硬體故障時並不能提供災難復原。它們提供的保護比備份少,但成本低廉得多。

CREATESNAPSHOT 範例

輸入

以下 API 命令會建立指定集合的快照。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=CREATESNAPSHOT&collection=techproducts&commitName=snapshot0&followAliases=true&async=someAsyncId
curl -X POST https://127.0.0.1:8983/api/collections/techproducts/snapshots/snapshot0 -H 'Content-Type: application/json' -d '
  {
    "followAliases": true,
    "async": "someAsyncId"
  }
'

輸出

{
  "responseHeader": {
    "status": 0,
    "QTime": 214
  },
  "requestid": "someAsyncId",
  "collection": "techproducts",
  "snapshot": "snapshot0",
  "followAliases": true
}

CREATESNAPSHOT 參數

collection

必要

預設值:無

要為其建立快照的集合的名稱。

snapshot

必要

預設值:無

要為集合建立的快照的名稱。

followAliases

選用

預設值:false

一個旗標,將集合參數視為要解析的實際集合名稱的別名。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理

LISTSNAPSHOTS:列出集合的所有快照

列出集合的所有快照。

LISTSNAPSHOTS 範例

輸入

以下 API 命令會列出集合的所有快照。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=LISTSNAPSHOTS&collection=techproducts
curl -X GET https://127.0.0.1:8983/api/collections/techproducts/snapshots

輸出

{
  "responseHeader": {
    "status": 0,
    "QTime": 2
  },
  "snapshots": {
    "snapshot0": {
      "name": "snapshot0",
      "status": "Successful",
      "creationDate": 1677985318116,
      "replicaSnapshots": [
        {
          "coreName": "techproducts_shard1_replica_n6",
          "indexDirPath": "/path/to/solr/dir/node1/solr/techproducts_shard1_replica_n6/data/index/",
          "generationNumber": 2,
          "leader": true,
          "shardId": "shard1",
          "files": [
            "_0.si",
            "_0.fdm",
            "_0_Lucene90_0.dvd",
            "segments_2",
            "_0_Lucene90_0.doc",
            "_0_Lucene90_0.tim",
            "_0.fdx",
            "_0.fdt",
            "_0_Lucene90_0.dvm",
            "_0_Lucene90_0.tip",
            "_0_Lucene90_0.tmd",
            "_0.fnm"
          ]
        },
        {
          "coreName": "techproducts_shard1_replica_n2",
          "indexDirPath": "/path/to/solr/dir/node2/solr/techproducts_shard1_replica_n2/data/index/",
          "generationNumber": 2,
          "leader": false,
          "shardId": "shard1",
          "files": [
            "_0.si",
            "_0.fdm",
            "_0_Lucene90_0.dvd",
            "segments_2",
            "_0_Lucene90_0.doc",
            "_0_Lucene90_0.tim",
            "_0.fdx",
            "_0.fdt",
            "_0_Lucene90_0.dvm",
            "_0_Lucene90_0.tip",
            "_0_Lucene90_0.tmd",
            "_0.fnm"
          ]
        },
        {
          "coreName": "techproducts_shard2_replica_n4",
          "indexDirPath": "/path/to/solr/dir/node1/solr/techproducts_shard2_replica_n4/data/index/",
          "generationNumber": 6,
          "leader": true,
          "shardId": "shard2",
          "files": [
            "segments_6"
          ]
        },
        {
          "coreName": "techproducts_shard2_replica_n1",
          "indexDirPath": "/path/to/solr/dir/node2/solr/techproducts_shard2_replica_n1/data/index/",
          "generationNumber": 6,
          "leader": false,
          "shardId": "shard2",
          "files": [
            "segments_6"
          ]
        }
      ],
      "shards": [
        "shard2",
        "shard1"
      ]
    }
  }
}

LISTSNAPSHOTS 參數

collection

必要

預設值:無

要為其建立快照的集合的名稱。

DELETESNAPSHOT:刪除集合的快照

刪除指定集合的快照。

DELETESNAPSHOT 範例

輸入

以下 API 命令會刪除集合的快照。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETESNAPSHOT&collection=techproducts&commitName=snapshot0&followAliases=true&async=someAsyncId
curl -X DELETE https://127.0.0.1:8983/api/collections/techproducts/snapshots/snapshot0?followAliases=true&async=someAsyncId

輸出

{
  "responseHeader": {
    "status": 0,
    "QTime": 20
  },
  "requestid": "someAsyncId",
  "collection": "techproducts",
  "snapshot": "snapshot0",
  "followAliases": true
}

DELETESNAPSHOT 參數

collection

必要

預設值:無

要從中刪除快照的集合的名稱。

snapshot

必要

預設值:無

要刪除的快照的名稱。

followAliases

選用

預設值:false

一個旗標,將 collectionName 參數視為要解析的實際集合名稱的別名。

async

選用

預設值:無

用於追蹤此動作的請求 ID,將會以非同步方式處理