Collections API

SolrCloud 集群包含许多组件。提供 Collections API 以允许您控制集群,包括集合、分片、副本、备份、领导者选举和其他操作需求。

由于此 API 有大量的命令和选项,我们将这些命令分组到以下子部分中

集群和节点管理命令:定义整个集群的属性;检查集群的状态;从节点中删除副本;利用新添加的节点;为节点添加或删除角色。

集合管理命令:创建、列出、重新加载和删除集合;设置集合属性;将文档迁移到另一个集合;重新平衡领导者;备份和恢复集合。

别名管理:创建、列出或删除集合别名;设置别名属性。

分片管理命令:创建和删除分片;将分片拆分为两个或多个附加分片;强制分片领导者。

副本管理命令:添加或删除副本;设置副本属性;将副本移动到不同的节点。

异步调用

由于某些集合 API 调用可能是长时间运行的任务(例如 SPLITSHARD),您可以选择让调用异步运行。指定 async=<请求 ID> 使您可以进行异步调用,可以使用 REQUESTSTATUS 调用随时请求其状态。提供的 ID 可以是任何字符串,只要其中没有 / 即可。

目前,REQUESTSTATUS 不会自动清除跟踪数据结构,这意味着已完成或失败任务的状态会保留在 ZooKeeper 中,除非手动清除。可以使用 DELETESTATUS 清除存储的状态。但是,集群中存储的异步调用响应数量限制为 10,000 个。

异步请求示例

输入

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=SPLITSHARD&collection=collection1&shard=shard1&async=1000
curl -X POST https://127.0.0.1:8983/api/collections/collection1/shards -H 'Content-Type: application/json' -d '
  {
    "split": {
      "shard": "shard1",
      "async": "1000"
    }
  }
'

输出

{
  "responseHeader":{
    "status":0,
    "QTime":115},
  "requestid":"1000"}

REQUESTSTATUS:异步调用的请求状态

请求已提交的异步集合 API(如下)调用的状态和响应。此调用也用于清除存储的状态。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=REQUESTSTATUS&requestid=1000
curl -X GET https://127.0.0.1:8983/api/cluster/command-status/1000

REQUESTSTATUS 参数

requestid

必需

默认值:无

用户为请求定义的请求 ID。这可用于跟踪已提交的异步任务的状态。

使用 REQUESTSTATUS 的示例

输入:有效的请求 ID

https://127.0.0.1:8983/solr/admin/collections?action=REQUESTSTATUS&requestid=1000&wt=xml

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
  </lst>
  <lst name="status">
    <str name="state">completed</str>
    <str name="msg">found 1000 in completed tasks</str>
  </lst>
</response>

输入:无效的请求 ID

https://127.0.0.1:8983/solr/admin/collections?action=REQUESTSTATUS&requestid=1004&wt=xml

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
  </lst>
  <lst name="status">
    <str name="state">notfound</str>
    <str name="msg">Did not find taskid [1004] in any tasks queue</str>
  </lst>
</response>

DELETESTATUS:删除状态

删除已失败或已完成的异步集合 API调用的存储响应。

  • V1 API

  • V2 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETESTATUS&requestid=1000

删除单个请求响应

curl -X DELETE https://127.0.0.1:8983/api/cluster/command-status/1000

清除所有存储的已完成和失败的异步请求响应

curl -X DELETE https://127.0.0.1:8983/api/cluster/command-status?flush=true

DELETESTATUS 参数

requestid

可选

默认值:无

应清除其存储响应的异步调用的请求 ID。

flush

可选

默认值:无

设置为 true 以清除所有存储的已完成和失败的异步请求响应。

使用 DELETESTATUS 的示例

输入:有效的请求 ID

https://127.0.0.1:8983/solr/admin/collections?action=DELETESTATUS&requestid=foo&wt=xml

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
  </lst>
  <str name="status">successfully removed stored response for [foo]</str>
</response>

输入:无效的请求 ID

https://127.0.0.1:8983/solr/admin/collections?action=DELETESTATUS&requestid=bar&wt=xml

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
  </lst>
  <str name="status">[bar] not found in stored responses</str>
</response>

输入:清除所有存储的状态

https://127.0.0.1:8983/solr/admin/collections?action=DELETESTATUS&flush=true&wt=xml

输出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
  </lst>
  <str name="status"> successfully cleared stored collection api responses </str>
</response>