SolrCloud将文档迁移到另一个集合:MIGRATE

2018-01-04 12:00 更新

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

在SolrCloud中MIGRATE命令用于将具有给定路由秘钥的所有文档迁移到另一个集合。源集合将继续具有相同的数据,但是它将开始将写入请求重新路由到目标集合,持续时间由forward.timeout参数指定的秒数。在MIGRATE操作完成之后,用户有责任切换到目标集合进行读取和写入操作。

由split.key参数指定的路由密钥可能跨越源集合和目标集合上的多个分片。迁移是在单个线程中按分片执行的。在“迁移(migrate)”过程中,可以通过此命令创建一个或多个临时集合,但它们会自动清除。

这是一个长时间运行的操作,因此强烈建议使用该async参数。如果未指定该async参数,则操作默认为同步,并建议在调用时保持较长的读取超时。即使读取超时时间很长,请求仍可能超时,但这并不一定意味着操作失败。用户应在再次调用该操作之前检查日志、群集状态、源和目标集合。

该命令仅适用于使用compositeId路由器的集合。目标集合在MIGRATE命令运行期间不能接收任何写入,否则有些写入可能会丢失。

请注意,MIGRATE API不会对文档执行任何重复数据删除,因此如果目标集合包含具有与正在迁移的文档相同的uniqueKey的文档,则目标集合将最终使用重复文档。

MIGRATE参数

collection

将从中分离文档的源集合的名称。该参数是必需的。

target.collection

要将文档迁移到的目标集合的名称。该参数是必需的。

split.key

路由秘钥的前缀。例如,如果文档的uniqueKey是“a!123”,那么你会使用split.key=a!。该参数是必需的。

forward.timeout

以秒为单位的超时,直到给定源集合的写请求split.key将被转发到目标分片。默认值是60秒。

property.name=value

将核心属性name设置为value。有关受支持的属性和值的详细信息,请参阅“定义core.properties”一节。

async

请求ID来跟踪这个将被异步处理的操作。

MIGRATE响应

响应将包括请求的状态。

使用MIGRATE的例子

在这个例子中输入如下:

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>
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号