集合管理命令
集合是使用单个 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
将使用的路由器名称。路由器定义文档如何在分片之间分布。可能的值为
implicit
或compositeId
。implicit
路由器不会自动将文档路由到不同的分片。无论您在索引请求中(或在每个文档中)指示哪个分片,都将用作这些文档的目标。compositeId
路由器会散列 uniqueKey 字段中的值,并在集合的集群状态中查找该散列,以确定哪个分片将接收文档,此外还具有手动指导路由的能力。当使用
implicit
路由器时,需要shards
参数。当使用compositeId
路由器时,需要numShards
参数。有关更多信息,另请参阅 文档路由 部分。
numShards
-
可选
默认值:无
作为集合的一部分要创建的分片数。当
router.name
为compositeId
时,这是一个必需的参数。 shards
(v1),shardNames
(v2)-
可选
默认值:无
创建此集合时使用的分片名称。当
router.name
为implicit
时,这是一个必需参数。对于 v1 请求,这些名称以单个逗号分隔的查询参数形式提供,例如shard-x,shard-y,shard-z
。对于 v2 请求,分片名称在请求正文中以值列表的形式提供,例如["shard-x", "shard-y", "shard-z"]
replicationFactor
-
可选
默认值:
1
为每个分片创建的副本数。
这将创建一个 NRT 类型的副本。如果您想要其他类型的副本,请参阅下面的
tlogReplicas
和pullReplicas
参数。有关副本类型的更多信息,请参阅 副本类型 部分。 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
模式。
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,该操作将异步处理。
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 参数
只读模式
将 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 集合,名为 collection1
和 collection2
,并且已存在以下别名
-
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
。 -
collection1
⇒collection2
:这个新创建的别名实际上将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
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,该操作将异步处理。
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 集合部分中详细描述):numShards
、replicationFactor
、nrtReplicas
、tlogReplicas
、pullReplicas
、shards
、policy
、createNodeSet
、createNodeSet.shuffle
、router.*
。
重新索引过程完成后,使用 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.0
和1.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_numeric
、docValues_binary
等)。 -
points
- 表示点值的聚合大小。
使用 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 提供对多个存储库的备份支持。有关完整列表,请参阅备份存储库部分。
备份数据存储在指定存储库中,基于提供的 name
和 location
的目录中。每个备份位置都可以保存同一集合的多个备份,允许用户稍后根据需要从任何这些“备份点”还原。在一个位置内,备份是增量完成的,因此会跳过以前上传的索引文件,而不会在备份存储库中重复。不能将多个集合备份到同一位置。
以前版本的 Solr 支持不同的备份文件格式,这种格式缺少上述增量支持。Solr 仍然可以从使用这种旧格式的备份中还原,但不建议创建这种格式的新备份,并且这种格式已正式弃用。有关更多信息,请参阅下面的 |
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 中发生了更改。虽然可以恢复在此格式更改之前创建的备份,但 LISTBACKUP
和 DELETEBACKUP
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.configName
、createNodeSet
(不支持 EMPTY
)、createNodeSet.shuffle
、nrtReplicas
、property.name=value
(即任意集合属性)、pullReplicas
、replicationFactor
和 tlogReplicas
。
有关这些参数的更多信息以及其 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 请求只能指定
backupId
、maxNumBackupPoints
和purgeUnused
中的一个。在 v1 请求中作为查询参数提供,在 v2 请求中作为路径参数提供。 maxNumBackupPoints
(v1),retainLatest
(v2)-
可选
默认值:无
TODO 指定应保留多少个备份,删除所有其他备份。每个 DELETEBACKUP 请求只能指定
backupId
、maxNumBackupPoints
和purgeUnused
中的一个。 purgeUnused
-
可选
默认值:无
如果删除引用它们的备份,Solr 的增量备份支持可能会使文件成为孤立文件。
purgeUnused
标志参数会触发扫描以检测这些孤立文件并将其删除。在同一位置重复执行备份的管理员应计划偶尔使用此参数来回收磁盘空间。每个 v1 DELETEBACKUP 请求只能指定backupId
、maxNumBackupPoints
和purgeUnused
中的一个。 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 次重新分配,且
maxAtOnce
为1
,而maxWaitSeconds
为60
,则命令可能等待的时间上限为 10 分钟。
使用 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"
]
}
}
}
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,该操作将异步处理。