SolrCloud將文檔遷移到另一個(gè)集合:MIGRATE

2018-01-04 12:00 更新

/admin/collections?action=MIGRATE&collection=name&split.key=key1!&target.collection=target_collection&forward.timeout=60

在SolrCloud中MIGRATE命令用于將具有給定路由秘鑰的所有文檔遷移到另一個(gè)集合。源集合將繼續(xù)具有相同的數(shù)據(jù),但是它將開始將寫入請(qǐng)求重新路由到目標(biāo)集合,持續(xù)時(shí)間由forward.timeout參數(shù)指定的秒數(shù)。在MIGRATE操作完成之后,用戶有責(zé)任切換到目標(biāo)集合進(jìn)行讀取和寫入操作。

由split.key參數(shù)指定的路由密鑰可能跨越源集合和目標(biāo)集合上的多個(gè)分片。遷移是在單個(gè)線程中按分片執(zhí)行的。在“遷移(migrate)”過(guò)程中,可以通過(guò)此命令創(chuàng)建一個(gè)或多個(gè)臨時(shí)集合,但它們會(huì)自動(dòng)清除。

這是一個(gè)長(zhǎng)時(shí)間運(yùn)行的操作,因此強(qiáng)烈建議使用該async參數(shù)。如果未指定該async參數(shù),則操作默認(rèn)為同步,并建議在調(diào)用時(shí)保持較長(zhǎng)的讀取超時(shí)。即使讀取超時(shí)時(shí)間很長(zhǎng),請(qǐng)求仍可能超時(shí),但這并不一定意味著操作失敗。用戶應(yīng)在再次調(diào)用該操作之前檢查日志、群集狀態(tài)、源和目標(biāo)集合。

該命令僅適用于使用compositeId路由器的集合。目標(biāo)集合在MIGRATE命令運(yùn)行期間不能接收任何寫入,否則有些寫入可能會(huì)丟失。

請(qǐng)注意,MIGRATE API不會(huì)對(duì)文檔執(zhí)行任何重復(fù)數(shù)據(jù)刪除,因此如果目標(biāo)集合包含具有與正在遷移的文檔相同的uniqueKey的文檔,則目標(biāo)集合將最終使用重復(fù)文檔。

MIGRATE參數(shù)

collection

將從中分離文檔的源集合的名稱。該參數(shù)是必需的。

target.collection

要將文檔遷移到的目標(biāo)集合的名稱。該參數(shù)是必需的。

split.key

路由秘鑰的前綴。例如,如果文檔的uniqueKey是“a!123”,那么你會(huì)使用split.key=a!。該參數(shù)是必需的。

forward.timeout

以秒為單位的超時(shí),直到給定源集合的寫請(qǐng)求split.key將被轉(zhuǎn)發(fā)到目標(biāo)分片。默認(rèn)值是60秒。

property.name=value

將核心屬性name設(shè)置為value。有關(guān)受支持的屬性和值的詳細(xì)信息,請(qǐng)參閱“定義core.properties”一節(jié)。

async

請(qǐng)求ID來(lái)跟蹤這個(gè)將被異步處理的操作。

MIGRATE響應(yīng)

響應(yīng)將包括請(qǐng)求的狀態(tài)。

使用MIGRATE的例子

在這個(gè)例子中輸入如下:

http://localhost:8983/solr/admin/collections?action=MIGRATE&collection=test1&split.key=a!&target.collection=test2

得到以下的輸出:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">19014</int>
  </lst>
  <lst name="success">
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1</int>
      </lst>
      <str name="core">test2_shard1_0_replica1</str>
      <str name="status">BUFFERING</str>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">2479</int>
      </lst>
      <str name="core">split_shard1_0_temp_shard1_0_shard1_replica1</str>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1002</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">21</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1655</int>
      </lst>
      <str name="core">split_shard1_0_temp_shard1_0_shard1_replica2</str>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">4006</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">17</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1</int>
      </lst>
      <str name="core">test2_shard1_0_replica1</str>
      <str name="status">EMPTY_BUFFER</str>
    </lst>
    <lst name="192.168.43.52:8983_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">31</int>
      </lst>
    </lst>
    <lst name="192.168.43.52:8983_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">31</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1</int>
      </lst>
      <str name="core">test2_shard1_1_replica1</str>
      <str name="status">BUFFERING</str>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1742</int>
      </lst>
      <str name="core">split_shard1_1_temp_shard1_1_shard1_replica1</str>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1002</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">15</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1917</int>
      </lst>
      <str name="core">split_shard1_1_temp_shard1_1_shard1_replica2</str>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">5007</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">8</int>
      </lst>
    </lst>
    <lst>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1</int>
      </lst>
      <str name="core">test2_shard1_1_replica1</str>
      <str name="status">EMPTY_BUFFER</str>
    </lst>
    <lst name="192.168.43.52:8983_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">30</int>
      </lst>
    </lst>
    <lst name="192.168.43.52:8983_solr">
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">30</int>
      </lst>
    </lst>
  </lst>
</response>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)