集合管理命令

集合是使用单个 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 请求可以通过向 createNodeSet 参数提供 EMPTY 标志值来实现。

createNodeSet.shuffle (v1), shuffleNodes (v2)

可选

默认值:true

控制为此集合创建的分片副本是否会按顺序分配给 createNodeSet 指定的节点,或者是否应在创建单个副本之前对节点列表进行随机排序。

false 值使集合创建的结果可预测,并可以更精确地控制各个分片副本的位置,但 true 可能是确保副本均匀分布在各个节点上的更好选择。

如果未同时指定 createNodeSet,则忽略此参数。

collection.configName (v1), config (v2)

可选

默认值:无

定义要用于此集合的配置的名称(**必须已存储在 ZooKeeper 中**)。

如果未提供,Solr 将使用 _default configset 的配置创建一个名为 <collectionName>.AUTOCREATED 的新(且可变)configset,并将其用于新集合。当删除此类集合时,其自动创建的 configset 将在默认情况下在不被任何其他集合使用时删除。

router.field (v1), router (v2)

可选

默认值:无

如果指定此参数,路由器将查看输入文档中的字段值来计算哈希并标识分片,而不是查看 uniqueKey 字段。如果文档中指定的字段为空,则该文档将被拒绝。

请注意,实时获取或通过文档 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 响应

响应将包括请求的状态和新的核心名称。如果状态不是“success”,则错误消息将解释请求失败的原因。

RELOAD:重新加载集合

当您更改了 ZooKeeper 中的配置文件时,例如上传新的 solrconfig.xml 时,将使用 RELOAD 操作。当通过 ZooKeeper 中的监视器监视的某些文件(例如 security.json)发生更改时,Solr 会自动重新加载集合。但是,对于 configset 中的文件(例如上传新的架构)的更改,您需要手动触发 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 响应

响应将包括请求的状态和已重新加载的核心。如果状态不是“success”,则错误消息将解释请求失败的原因。

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 的示例

假设有两个实际的 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

  • 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 响应

响应将包括请求的状态和已删除的内核。如果状态不是“success”,则错误消息将解释请求失败的原因。

输出

<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

可选

默认值:无

将核心属性 _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

可选

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

目标集合的配置集名称。

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 集合模式,并指示不兼容字段的名称,即 Lucene 字段的字段类型与当前模式中声明的相应 Solr 字段类型不兼容(或不同)。这种不兼容可能是由于不兼容的模式更改或在将数据迁移到不同的主要 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 values 的聚合大小(例如,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 命令 从每个分片中获取一个索引副本。对于配置,它会备份与集合和元数据关联的配置集。

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

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

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

可选

默认值:无

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

增量式

可选

默认值:true

一个布尔参数,允许用户选择创建增量备份(incremental=true)还是“完整”备份(incremental=false)。如果未指定,则默认情况下会执行增量备份。在所有已知情况下,增量备份都是首选,而“完整”(即非增量)备份已被弃用,因此仅应在仔细考虑后才使用此参数。

indexBackup (v1), backupStrategy (v2)

可选

默认值: "copy-files"

一个字符串参数,允许用户指定几种不同的备份“策略”之一。有效选项为 copy-files(同时备份集合配置集和索引数据)和 none(仅备份集合配置集)。

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

您可以使用集合 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)

可选

默认值:无

TODO 指定应保留多少个备份,删除所有其他备份。每个 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

一个标志,将 collection 参数视为要解析的实际集合名称的别名。

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,该操作将异步处理