集合管理命令

集合是一个使用单个 Solr 配置文件 (solrconfig.xml) 和单个索引架构的单个逻辑索引。

本节中的所有示例都假设您正在运行“techproducts”Solr 示例

bin/solr -c -e techproducts

创建:创建集合

CREATE 操作用于创建新的数据集合。

V1 API

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

V2 API

使用 v2 API 时,create 命令作为包含所需参数的 JSON 数据的一部分提供

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

创建参数

CREATE 操作允许以下参数

name

必需

默认值:无

要创建的集合的名称。

router.name

可选

默认值:compositeId

将使用的路由器名称。路由器定义文档如何在分片之间分配。可能的值为 implicitcompositeId

implicit 路由器不会自动将文档路由到不同的分片。您在索引请求中(或在每个文档中)指示的任何分片都将用作这些文档的目标。

compositeId 路由器对 uniqueKey 字段中的值进行哈希处理,并在集合的 clusterstate 中查找该哈希值,以确定哪个分片将接收文档,并具有手动指导路由的附加功能。

使用 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 请求可以通过向 createNodeSet 参数提供 EMPTY 标志值来执行此操作。

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

http://localhost:8983/solr/admin/collections?action=RELOAD&name=techproducts_v2

V2 API

使用 v2 API,reload 命令作为 URL 路径的一部分提供。如果省略可选的 async 参数,则请求正文是可选的

curl -X POST http://localhost: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

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

http://localhost:8983/solr/admin/collections?action=modifycollection&collection=techproducts_v2&replicationFactor=2

V2 API

对于 v2 API,modify 命令作为包含所需参数的 JSON 数据的一部分提供

curl -X POST http://localhost: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

http://localhost:8983/solr/admin/collections?action=LIST

V2 API

使用 v2 API 时,list 命令作为包含所需参数的 JSON 数据的一部分提供

curl -X GET http://localhost:8983/api/collections

输出

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

RENAME:重命名集合

重命名集合会设置一个指向底层集合的标准别名,以便现在可以使用新名称在查询、索引和管理操作中引用同一个(未修改的)集合。

此命令实际上不会重命名底层 Solr 集合 - 它使用新名称设置一个新的单对单别名,或重命名现有别名以使用新名称,同时仍引用相同的底层 Solr 集合。但是,从用户的角度来看,现在可以使用新名称访问集合,并且可以在其他别名中引用新名称。

适用以下限制

  • 现有名称必须是 SolrCloud 集合或引用单个集合的标准别名。不支持引用多个集合的别名。

  • 现有名称不能是路由别名。

  • 目标名称不能是现有别名。

V1 API

http://localhost:8983/solr/admin/collections?action=RENAME&name=techproducts_v2&target=newName

V2 API

curl -X POST http://localhost:8983/api/collections/techproducts/rename -H 'Content-Type: application/json' -d '
  {
    "to": "newName"
  }
'

RENAME 命令参数

name

必需

默认值:无

现有 SolrCloud 集合的名称或引用恰好一个集合且不是路由别名的别名。

target (v1)、to (v2)

必需

默认值:无

集合的目标名称。这将是引用底层 SolrCloud 集合的新别名。集合的原始名称(或别名)也会在现有别名中替换,以便它们也引用新名称。目标名称不能是现有别名。

使用 RENAME 的示例

假设有两个实际的 SolrCloud 集合,名为 collection1collection2,并且已经存在以下别名

  • col1 ⇒ collection1:解析为 collection1

  • col2 ⇒ collection2:解析为 collection2

  • simpleAlias ⇒ col1:解析为 collection1

  • compoundAlias ⇒ col1,col2:解析为 collection1,collection2

col1 重命名为 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

http://localhost:8983/solr/admin/collections?action=DELETE&name=techproducts_v2

V2 API

curl -X DELETE http://localhost:8983/api/collections/techproducts_v2

要异步运行 DELETE,请附加 async 参数

curl -X DELETE http://localhost: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

http://localhost:8983/solr/admin/collections?action=COLLECTIONPROP&name=techproducts_v2&propertyName=propertyName&propertyValue=propertyValue

V2 API

要创建或更新集合属性

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

要删除现有集合属性

curl -X DELETE http://localhost: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

http://localhost:8983/solr/admin/collections?action=MIGRATE&collection=techproducts_v2&split.key=key1!&target.collection=postMigrationCollection&forward.timeout=60

V2 API

curl -X POST http://localhost: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

可选

默认值:无

将核心属性 name 设置为 value。有关受支持的属性和值的详细信息,请参阅 核心发现 部分。

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将异步处理

MIGRATE 响应

响应将包括请求的状态。

REINDEXCOLLECTION:重新索引集合

REINDEXCOLLECTION 命令使用源集合中的现有数据重新索引集合。

V1 API

http://localhost:8983/solr/admin/collections?action=REINDEXCOLLECTION&name=techproducts_v2

V2 API

我们目前没有 V2 等效项。

重新索引可能是一个有损耗的操作。一些现有的索引数据可能无法作为存储字段获得,因此用户应谨慎使用此命令,首先通过使用不同的源和目标集合名称来评估潜在影响,并在评估完成之前保留源集合。

目标集合不得存在(并且不得是别名)。如果目标集合名称与源集合相同,则首先将为目标集合生成一个唯一的顺序名称,然后在重新索引完成后,将创建一个别名,该别名从源名称指向实际的顺序命名的目标集合。

当重新索引开始时,源集合将置于只读模式中,以确保所有源文档都得到正确处理。

使用可选参数,可以为目标集合请求不同的索引模式、集合形状(分片和副本数)或路由参数。

重新索引作为流表达式守护程序执行,该守护程序在源集合的一个副本上运行。这通常是一个耗时的操作,因此建议将其作为异步请求执行,以避免请求超时。对于给定的源集合,一次只能执行一个重新索引操作。可以使用abort选项终止长时间运行、错误或崩溃的重新索引操作,该选项还会删除部分结果。

REINDEXCOLLECTION 参数

name

必需

默认值:无

源集合名称,可以是别名。

cmd

可选

默认值:start

当前支持的命令是

  • start:如果尚未运行,则开始处理。

  • abort:中止已运行的重新索引(或在崩溃后清除剩余状态),并删除部分结果。

  • status:返回正在运行的重新索引命令的详细状态。

target

可选

默认值:无

目标集合名称。如果未指定,则将生成一个唯一名称,并且在复制所有文档后,将创建一个别名,该别名从源集合名称指向唯一顺序命名的集合。这实际上“隐藏”了原始源集合,使其免于常规更新和搜索操作。

q

可选

默认值:*:*

用于选择要重新索引的文档的查询。

fl

可选

默认值:*

要重新索引的字段列表。

rows

可选

默认值:100

传输文档的批处理大小。根据文档的平均大小,较大的批处理大小可能会导致内存问题。

configName
collection.configName

可选

默认值:<源集合的名称>

目标集合的配置集名称。

removeSource

可选

默认值:false

如果为true,则在处理成功完成后,将删除源集合。

async

可选

默认值:无

可选请求 ID,用于跟踪此操作,该操作将异步处理

此外,还有许多可选参数决定目标集合布局。如果在请求中未指定这些参数,则其值将从源集合中复制。目前支持以下参数(在创建集合部分中详细描述):numShardsreplicationFactornrtReplicastlogReplicaspullReplicasshardspolicycreateNodeSetcreateNodeSet.shufflerouter.*

重新索引过程完成后,目标集合将使用 property.rx: "finished" 标记,源集合状态将更新为可读写。对于任何错误,该命令都将删除所有临时集合和目标集合,并且还将重置源集合的只读标志的状态。

使用 REINDEXCOLLECTION 的示例

输入

http://localhost: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

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

V2 API

最接近的 V2 API 是这个,但不支持 V1 等效项的所有功能。

curl -X GET http://localhost: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

当索引大于某个阈值(每个分片 100k 个文档)时,实际上只检索并分析部分数据以减少 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_* - 表示按类型(例如,docValues_numericdocValues_binary 等)分组的文档值的总大小。

  • points - 表示点值的总大小。

COLSTATUS 响应

响应将包括集合状态、活动或非活动分片和副本的数量以及分片领导者的其他索引信息的概述。

使用 COLSTATUS 的示例

输入

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

输出

{
    "responseHeader": {
        "status": 0,
        "QTime": 50
    },
    "gettingstarted": {
        "znodeVersion": 16,
        "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"
                                }}}}}}}}}

使用原始索引数据分析工具的示例

输入

http://localhost: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

http://localhost:8983/solr/admin/collections?action=BACKUP&name=techproducts_backup&collection=techproducts&location=file:///path/to/my/shared/drive

V2 API

curl -X POST http://localhost: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 命令从每个分片获取一个副本。对于配置,它将备份与集合关联的配置集和元数据。

Solr 为许多存储库提供备份支持。有关完整列表,请参阅备份存储库部分。

备份数据存储在指定存储库中的目录中,基于提供的namelocation。每个备份位置可以保存同一集合的多个备份,允许用户稍后根据需要从这些“备份点”中的任何一个还原。在一个位置内,备份是增量完成的,因此先前上传的索引文件将被跳过,并且不会在备份存储库中重复。无法将多个集合备份到同一位置。

Solr 的早期版本支持不同的备份文件格式,该格式缺少上述增量支持。Solr 仍然可以从使用此旧格式的备份中还原,但建议不要创建此格式的新备份,并且已正式弃用。有关更多信息,请参见下面的incremental参数。

备份参数

collection

必需

默认值:无

要备份的集合的名称。作为 v1 请求的查询参数提供,作为 v2 请求的路径段提供。

name

必需

默认值:无

创建的备份的名称。作为 v1 请求的查询参数提供,或作为 v2 请求的路径段提供。检查此名称以确保其不存在,否则会引发错误消息。

location

必需

默认值:无

备份命令写入的共享驱动器上的位置。此参数是必需的,除非在存储库配置中定义了默认位置,或将其设置为群集属性

如果位置路径位于已装载的驱动器上,则即使监督程序节点不托管要备份的集合的副本,该装载也必须在充当监督程序的节点上可用。由于任何节点都可以在任何时候担任监督程序角色,因此避免可能发生的备份故障的最佳做法是确保装载点在群集的所有节点上都可用。

每个备份位置只能保存一个集合的备份,但同一个位置可用于同一集合的重复备份。同一集合的重复备份将以增量方式执行,因此自上次备份后未更改的文件不会在备份存储库中重复。

如果您正在使用S3 备份存储库,请阅读有关location选项的 S3 特定警告。

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将异步处理

存储库

可选

默认值:无

用于备份的存储库的名称。如果未指定存储库,则将自动使用本地文件系统存储库。

maxNumBackupPoints

可选

默认值:无

在备份位置保留的备份数量上限。如果当前数量超过此上限,则将删除较旧的备份,直到仅保留maxNumBackupPoints个备份。如果指定了incremental=false,则此参数无效。

backupConfigset

可选

默认值:true

指示是否应将 configset 文件与索引备份一起包含。请注意,为了还原集合,configset 必须存在于 ZooKeeper 中或成为备份的一部分。仅当您可以通过 Solr 外部的其他方式还原 configset 时,才将此设置为false(即,您已将其存储在应用程序源代码中,是 ZooKeeper 备份的一部分,等等)。

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

可选

默认值:无

+ 允许存储与备份相关的自定义信息的附加键/值对。在 v2 中,该值是键值对的映射。

增量

可选

默认值: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 选项相同。

存储库

可选

默认值:无

用于访问备份信息的存储库的名称。如果未指定存储库,则将自动使用本地文件系统存储库。

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将异步处理

LISTBACKUP 示例

输入

V1 API

http://localhost:8983/solr/admin/collections?action=LISTBACKUP&name=myBackupName&location=/path/to/my/shared/drive

V2 API

curl -X GET "http://localhost: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

curl -X GET http://localhost: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

V2 API

curl -X POST http://localhost: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 中存在具有相同名称的配置集,则 Solr 将重复使用该配置集,否则它将上传 ZooKeeper 中的备份配置集并使用该配置集。

您可以使用集合 CREATEALIAS 命令来确保客户端无需更改端点以针对新还原的集合进行查询或索引。

还原参数

collection

必需

默认值:无

将索引还原到的集合。此参数是必需的。

name

必需

默认值:无

要还原的现有备份的名称。此参数是必需的。作为 v1 请求的查询参数提供,并在 v2 请求的 URL 路径中提供。

location

可选

默认值:无

RESTORE 命令读取的备份存储库中的位置。或者,可以将其设置为 群集属性。+

这必须与在 创建备份 时给出的 location 选项相同。

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将异步处理

存储库

可选

默认值:无

用于备份的存储库的名称。如果未指定存储库,则将自动使用本地文件系统存储库。

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

http://localhost:8983/solr/admin/collections?action=DELETEBACKUP&name=myBackupName&location=/path/to/my/shared/drive&backupId=0

V2 API

curl -X DELETE "http://localhost: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

http://localhost:8983/solr/admin/collections?action=DELETEBACKUP&name=myBackupName&location=/path/to/my/shared/drive&maxNumBackupsPoints=2

V2 API

curl -X DELETE "http://localhost:8983/api/backups/myBackupName/versions?retainLatest=2&location=/path/to/my/shared/drive"

“垃圾回收”未使用文件

V1 API

http://localhost:8983/solr/admin/collections?action=DELETEBACKUP&name=myBackupName&location=/path/to/my/shared/drive&purgeUnused=true

V2 API

curl -X PUT -H "Content-type: application/json" "http://localhost:8983/api/backups/myBackupName/purgeUnused" '
  {
    "location": "/path/to/my/shared/drive"
  }
'

DELETEBACKUP 参数

name

必需

默认值:无

要从中删除备份文件的备份名称。在 v1 请求中作为查询参数提供,在 v2 请求中作为路径参数提供。

location

必需

默认值:无

要从中删除备份的存储库位置。此参数是必需的,除非在存储库配置中定义了默认位置,或将其设置为 集群属性

如果位置路径位于已装载的驱动器上,则即使监督程序节点不托管要备份的集合的副本,该装载也必须在充当监督程序的节点上可用。由于任何节点都可以在任何时候担任监督程序角色,因此避免可能发生的备份故障的最佳做法是确保装载点在群集的所有节点上都可用。

这必须与在 创建备份 时给出的 location 选项相同。

存储库

可选

默认值:无

要用于删除备份文件的存储库名称。如果未指定存储库,则将自动使用本地文件系统存储库。

backupId

可选

默认值:无

明确指定要删除的单个备份 ID。每个 v1 DELETEBACKUP 请求只能指定 backupIdmaxNumBackupPointspurgeUnused 中的一个。在 v1 请求中作为查询参数提供,在 v2 请求中作为路径参数提供。

maxNumBackupPoints (v1)、retainLatest (v2)

可选

默认值:无

TODO 指定应保留多少个备份,删除所有其他备份。每个 DELETEBACKUP 请求只能指定一个 backupIdmaxNumBackupPointspurgeUnused

purgeUnused

可选

默认值:无

如果删除引用它们的备份,Solr 的增量备份支持可能会使文件成为孤立文件。purgeUnused 标志参数会触发扫描,以检测这些孤立文件并将其删除。在同一位置执行重复备份的管理员应计划偶尔使用此参数来回收磁盘空间。每个 v1 DELETEBACKUP 请求只能指定一个 backupIdmaxNumBackupPointspurgeUnused

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将异步处理

REBALANCELEADERS:重新平衡领导者

根据活动节点上的 preferredLeader 属性重新分配集合中的领导者。

V1 API

http://localhost:8983/solr/admin/collections?action=REBALANCELEADERS&collection=techproducts

V2 API

使用 v2 API 时,rebalance-leaders 命令作为包含所需参数的 JSON 数据的一部分提供

curl -X POST http://localhost: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 次重新分配,并且 maxAtOnce1maxWaitSeconds60,则该命令可能等待的时间的上限为 10 分钟。

REBALANCELEADERS 响应

响应将包括请求的状态。“0”状态表示请求已处理,但并不表示所有分配都已成功。请查看“摘要”部分以了解该信息。

使用 REBALANCELEADERS 的示例

输入

以下任一命令都会导致所有已设置 preferredLeader 属性且尚未成为首选领导者的活动副本成为领导者。

http://localhost:8983/solr/admin/collections?action=REBALANCELEADERS&collection=collection1&wt=json

http://localhost: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 的领导者,因此将领导力分配给该副本。

带有“成功”标记的“摘要”部分表示该命令已重新平衡所有已按要求设置 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

http://localhost:8983/solr/admin/collections?action=CREATESNAPSHOT&collection=techproducts&commitName=snapshot0&followAliases=true&async=someAsyncId

V2 API

curl -X POST http://localhost: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

http://localhost:8983/solr/admin/collections?action=LISTSNAPSHOTS&collection=techproducts

V2 API

curl -X GET http://localhost: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

http://localhost:8983/solr/admin/collections?action=DELETESNAPSHOT&collection=techproducts&commitName=snapshot0&followAliases=true&async=someAsyncId

V2 API

curl -X DELETE http://localhost: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,用于跟踪此操作,该操作将异步处理