Solr部署:集合管理命令完整指南

概述

集合是使用单个Solr配置文件(solrconfig.xml)和单个索引模式的单一逻辑索引。集合管理命令为SolrCloud提供了完整的集合生命周期管理功能,包括创建、修改、删除、备份、恢复等核心操作。

本指南中的所有示例假设你正在运行”techproducts” Solr示例:

1
bin/solr start -c -e techproducts

CREATE:创建集合

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

API调用方式

V1 API:

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

V2 API:

1
2
3
4
5
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
  • 说明:路由器名称,定义文档如何在分片间分布
    • implicit:不自动路由文档,需要明确指定分片
    • compositeId:基于唯一键字段值哈希分布文档
    • 使用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类型副本

nrtReplicas

  • 类型:可选
  • 说明:创建的NRT(近实时)副本数量。维护事务日志并本地更新索引

tlogReplicas

  • 类型:可选
  • 说明:创建的TLOG副本数量。维护事务日志但只通过从领导者复制更新索引

pullReplicas

  • 类型:可选
  • 说明:创建的PULL副本数量。不维护事务日志,只通过从领导者复制更新索引。不能成为领导者

节点分布参数

createNodeSet (v1) / nodeSet (v2)

  • 类型:可选
  • 说明:定义新集合分布的节点
  • 格式
    • V1:逗号分隔,如localhost:8983_solr,localhost:8984_solr
    • V2:数组形式,如["localhost:8983_solr", "localhost:7574_solr"]
  • 特殊值:V1可使用EMPTY初始不创建副本,后续通过ADDREPLICA添加

createReplicas (v2)

  • 类型:可选
  • 默认值true
  • 说明:控制是否在集合创建过程中创建副本。仅V2 API可用

createNodeSet.shuffle (v1) / shuffleNodes (v2)

  • 类型:可选
  • 默认值true
  • 说明:控制分片副本是否按顺序分配到指定节点,还是先打乱节点列表

配置参数

collection.configName (v1) / config (v2)

  • 类型:可选
  • 说明:要用于此集合的配置名称(必须已存储在ZooKeeper中)
  • 默认行为:如果未提供,Solr使用_default配置集创建名为<collectionName>.AUTOCREATED的新配置集

router.field (v1) / router (v2)

  • 类型:可选
  • 说明:如果指定,路由器将查看输入文档中此字段的值来计算哈希并识别分片,而非查看uniqueKey字段

perReplicaState

  • 类型:可选
  • 默认值false
  • 说明:如果为true,单个副本的状态将作为state.json的单独子项维护

高级参数

property.name=value

  • 类型:可选
  • 说明:设置核心属性。这是专家级选项,应谨慎使用

waitForFinalState

  • 类型:可选
  • 说明:如果为true,请求将仅在所有受影响的副本变为活跃时完成

alias

  • 类型:可选
  • 说明:创建集合时同时创建指向此集合的别名

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

集合首先以读写模式创建,但可以使用MODIFYCOLLECTION操作设置为只读模式。

RELOAD:重载集合

当你在ZooKeeper中更改了配置文件(如上传新的solrconfig.xml)时使用RELOAD操作。Solr会自动重载某些通过ZooKeeper监视的文件(如security.json),但对于配置集中的文件更改,需要手动触发RELOAD。

API调用方式

V1 API:

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

V2 API:

1
2
3
curl -X POST http://localhost:8983/api/collections/techproducts_v2/reload -H 'Content-Type: application/json' -d '{
"async": "someAsyncId"
}'

RELOAD 参数

name

  • 类型:必需
  • 说明:要重载的集合名称

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

MODIFYCOLLECTION:修改集合属性

可以同时编辑多个属性。更改这些值仅更新ZooKeeper上的znode,不会更改集合的拓扑。例如,增加replicationFactor不会自动向集合添加更多副本,但会允许更多ADDREPLICA命令成功。

API调用方式

V1 API:

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

V2 API:

1
2
3
4
5
curl -X POST http://localhost:8983/api/collections/techproducts_v2 -H 'Content-Type: application/json' -d '{
"modify": {
"replicationFactor": 2
}
}'

MODIFYCOLLECTION 参数

collection

  • 类型:必需
  • 说明:要修改的集合名称

attribute=value

  • 类型:必需
  • 说明:属性名称和属性值的键值对。可修改的属性包括:
    • replicationFactor
    • collection.configName
    • readOnly
    • 使用property.前缀的其他自定义属性

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

只读模式

readOnly属性设置为true会将集合置于只读模式,此时任何索引更新请求都将被拒绝。其他集合级操作(如添加/删除/移动副本)在此模式下仍可用。

从读写到只读模式的转换包括以下步骤:

  1. 在集合状态中更改readOnly标志
  2. 任何新的更新请求都将被拒绝并返回403 FORBIDDEN错误(正在进行的长时间运行请求也将被中止)
  3. 执行强制提交以刷新和提交任何正在进行的更新
  4. 执行集合RELOAD操作

移除readOnly属性或将其设置为false可启用更新处理并重新加载集合。

LIST:列出集合

获取集群中集合的名称。

API调用方式

V1 API:

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

V2 API:

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

响应示例

1
2
3
4
5
6
7
8
9
10
11
{
"responseHeader": {
"status": 0,
"QTime": 2011
},
"collections": [
"collection1",
"example1",
"example2"
]
}

RENAME:重命名集合

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

此命令实际上并不重命名底层Solr集合——它使用新名称设置新的一对一别名,或重命名现有别名以使其使用新名称,同时仍引用同一底层Solr集合。

API调用方式

V1 API:

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

V2 API:

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

RENAME 限制和参数

限制条件

  • 现有名称必须是SolrCloud集合或引用单个集合的标准别名
  • 引用超过1个集合的别名不受支持
  • 现有名称不能是路由别名
  • 目标名称不能是现有别名

参数说明

name

  • 类型:必需
  • 说明:现有SolrCloud集合名称或引用单个集合的别名名称

target (v1) / to (v2)

  • 类型:必需
  • 说明:集合的目标名称。这将是引用底层SolrCloud集合的新别名

RENAME 示例

假设有两个实际的SolrCloud集合collection1collection2,以及以下现有别名:

  • col1 => collection1
  • col2 => collection2
  • simpleAlias => col1(解析为collection1
  • compoundAlias => col1,col2(解析为collection1,collection2

col1重命名为foo后,别名将变为:

  • foo => collection1
  • col2 => collection2
  • simpleAlias => foo(解析为collection1
  • compoundAlias => foo,col2(解析为collection1,collection2

DELETE:删除集合

DELETE操作用于删除集合。

API调用方式

V1 API:

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

V2 API:

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

异步删除:

1
curl -X DELETE http://localhost:8983/api/collections/techproducts_v2?async=aaaa

DELETE 参数

name

  • 类型:必需
  • 说明:要删除的集合名称

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

COLLECTIONPROP:集合属性管理

添加、编辑或删除集合属性。

API调用方式

V1 API:

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

V2 API 创建或更新属性:

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

V2 API 删除属性:

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

COLLECTIONPROP 参数

name (v1)

  • 类型:可选
  • 说明:要设置属性的集合名称

propertyName (v1)

  • 类型:可选
  • 说明:属性名称

propertyValue (v1) / value (v2)

  • 类型:可选
  • 说明:属性值。在v1请求中未提供时,属性将被删除

MIGRATE:文档迁移

MIGRATE命令用于将具有给定路由键的所有文档迁移到另一个集合。源集合将继续保持相同数据,但在forward.timeout参数指定的秒数内,它将开始将写请求重新路由到目标集合。

API调用方式

V1 API:

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

V2 API:

1
2
3
4
5
6
curl -X POST http://localhost:8983/api/collections/techproducts_v2 -H 'Content-Type: application/json' -d '{
"migrate-docs": {
"target": "postMigrationCollection",
"splitKey": "key1!"
}
}'

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的写请求将转发到目标分片的超时时间(秒)

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

MIGRATE 注意事项

  • 这是长时间运行的操作,强烈建议使用async参数
  • 此命令仅适用于使用compositeId路由器的集合
  • 目标集合在MIGRATE命令运行期间不得接收任何写入,否则可能丢失某些写入
  • MIGRATE API不对文档执行去重操作

REINDEXCOLLECTION:重新索引集合

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

API调用方式

V1 API:

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

注意:当前没有V2 API等效操作。

REINDEXCOLLECTION 参数

name

  • 类型:必需
  • 说明:源集合名称,可以是别名

cmd

  • 类型:可选
  • 默认值start
  • 支持的命令
    • start:如果尚未运行则开始处理
    • abort:中止已运行的重新索引(或清除崩溃后的遗留状态),并删除部分结果
    • status:返回正在运行的重新索引命令的详细状态

target

  • 类型:可选
  • 说明:目标集合名称。如果未指定,将生成唯一名称,复制所有文档后创建从源集合名称指向唯一命名集合的别名

q

  • 类型:可选
  • 默认值*:*
  • 说明:选择要重新索引的文档的查询

fl

  • 类型:可选
  • 默认值*
  • 说明:要重新索引的字段列表

rows

  • 类型:可选
  • 默认值100
  • 说明:传输文档的批大小

configName / collection.configName

  • 类型:可选
  • 默认值:源集合名称
  • 说明:目标集合的配置集名称

removeSource

  • 类型:可选
  • 默认值false
  • 说明:如果为true,处理成功完成后将删除源集合

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

REINDEXCOLLECTION 注意事项

  • 重新索引是可能有损的操作
  • 目标集合必须不存在(且不能是别名)
  • 重新索引启动时,源集合将设置为只读模式
  • 重新索引作为流式表达式守护进程执行
  • 通常是耗时操作,建议作为异步请求执行

COLSTATUS:集合索引详细状态

COLSTATUS命令提供集合状态的详细描述,包括段和字段数据的低级索引信息。

API调用方式

V1 API:

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

V2 API:

1
curl -X GET "http://localhost:8983/api/collections/techproducts_v2?coreInfo=true&segments=true&fieldInfo=true&sizeInfo=true"

COLSTATUS 参数

collection

  • 类型:可选
  • 说明:集合名称。如果缺失,返回所有集合信息(仅v1请求支持)

coreInfo

  • 类型:可选
  • 默认值false
  • 说明:如果为true,将提供分片领导者的SolrCore附加信息

segments

  • 类型:可选
  • 默认值false
  • 说明:如果为true,将提供段信息

fieldInfo

  • 类型:可选
  • 默认值false
  • 说明:如果为true,将提供详细的Lucene字段信息及其对应的Solr模式类型

sizeInfo

  • 类型:可选
  • 默认值false
  • 说明:如果为true,将提供索引文件大小和RAM使用情况的附加信息

索引大小分析工具

COLSTATUS命令还提供用于分析和估算原始索引数据组成的工具。此工具应谨慎使用,因为它会在所有分析集合的分片领导者上产生大量IO负载。

rawSize

  • 类型:可选
  • 默认值false
  • 说明:如果为true,运行原始索引数据分析工具

rawSizeSummary

  • 类型:可选
  • 默认值false
  • 说明:如果为true,还包括按字段和按类型的数据大小的更详细细分

rawSizeDetails

  • 类型:可选
  • 默认值false
  • 说明:如果为true,提供详细统计信息,包括每字段每类型的项目统计分布以及每字段前20个最大项目

rawSizeSamplingPercent

  • 类型:可选
  • 默认值5.0
  • 说明:当索引大于某个阈值(每分片100k文档)时,只检索和分析部分数据以减少IO负载

备份和恢复

BACKUP:备份集合

将Solr集合和相关配置备份到”备份存储库”。

API调用方式

V1 API:

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

V2 API:

1
2
3
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 参数

collection

  • 类型:必需
  • 说明:要备份的集合名称

name

  • 类型:必需
  • 说明:要创建的备份名称

location

  • 类型:必需
  • 说明:备份命令写入的共享驱动器位置

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

repository

  • 类型:可选
  • 说明:用于备份的存储库名称。如果未指定则自动使用本地文件系统存储库

maxNumBackupPoints

  • 类型:可选
  • 说明:备份位置应保留的备份数量上限

backupConfigset

  • 类型:可选
  • 默认值true
  • 说明:指示是否应在索引备份中包含配置集文件

incremental

  • 类型:可选
  • 默认值true
  • 说明:选择创建增量备份还是”完整”备份

indexBackup (v1) / backupStrategy (v2)

  • 类型:可选
  • 默认值copy-files
  • 说明:备份策略,可选值为copy-filesnone

RESTORE:恢复集合

从指定备份将Solr索引和相关配置恢复到指定集合。

API调用方式

V1 API:

1
curl -X GET http://localhost:8983/solr/admin/collections?action=RESTORE&name=techproducts_backup&location=file:///path/to/my/shared/drive&collection=techproducts_v3

V2 API:

1
2
3
4
5
6
7
8
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"]
}
}'

RESTORE 参数

collection

  • 类型:必需
  • 说明:索引将恢复到的集合

name

  • 类型:必需
  • 说明:要恢复的现有备份名称

location

  • 类型:可选
  • 说明:RESTORE命令从中读取的备份存储库中的位置

repository

  • 类型:可选
  • 说明:用于备份的存储库名称

backupId

  • 类型:可选
  • 说明:要从中恢复的特定备份点的ID

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

LISTBACKUP:列出备份

列出存储在指定存储库位置的每个备份的信息。

API调用方式

V1 API:

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

V2 API:

1
curl -X GET "http://localhost:8983/api/backups/backupName/versions?location=/path/to/my/shared/drive"

DELETEBACKUP:删除备份文件

从远程存储库删除备份文件。

API调用方式

按备份ID删除:

1
2
3
4
5
# 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"

删除除最近N个备份外的所有备份:

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

快照管理

CREATESNAPSHOT:创建集合快照

Solr支持创建集合”快照”,”检查点”集合状态,以便用户可以在需要时稍后恢复到该点。这在重新索引或对集合进行配置更改之前特别有用。

API调用方式

V1 API:

1
http://localhost:8983/solr/admin/collections?action=CREATESNAPSHOT&collection=techproducts&commitName=snapshot0

V2 API:

1
2
3
4
curl -X POST http://localhost:8983/api/collections/techproducts/snapshots/snapshot0 -H 'Content-Type: application/json' -d '{
"followAliases": true,
"async": "someAsyncId"
}'

CREATESNAPSHOT 参数

collection

  • 类型:必需
  • 说明:要为其创建快照的集合名称

snapshot

  • 类型:必需
  • 说明:要为集合创建的快照名称

followAliases

  • 类型:可选
  • 默认值:false
  • 说明:将集合参数视为要解析的实际集合名称的别名的标志

async

  • 类型:可选
  • 说明:异步处理此操作的请求ID

LISTSNAPSHOTS:列出集合快照

列出集合的所有快照。

API调用方式

V1 API:

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

V2 API:

1
curl -X GET http://localhost:8983/api/collections/techproducts/snapshots

DELETESNAPSHOT:删除集合快照

删除指定集合的快照。

API调用方式

V1 API:

1
http://localhost:8983/solr/admin/collections?action=DELETESNAPSHOT&collection=techproducts&commitName=snapshot0

V2 API:

1
curl -X DELETE http://localhost:8983/api/collections/techproducts/snapshots/snapshot0

REBALANCELEADERS:重新平衡领导者

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

API调用方式

V1 API:

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

V2 API:

1
2
3
4
5
curl -X POST http://localhost:8983/api/collections/techproducts -H 'Content-Type: application/json' -d '{
"rebalance-leaders": {
"maxAtOnce": 3
}
}'

REBALANCELEADERS 参数

collection

  • 类型:必需
  • 说明:要重新平衡preferredLeaders的集合名称

maxAtOnce

  • 类型:可选
  • 说明:同时排队的最大重新分配数量

maxWaitSeconds

  • 类型:可选
  • 默认值:60秒
  • 说明:等待领导者重新分配的超时时间

最佳实践建议

集合设计

  1. 合理设置分片数量:根据数据量和查询负载确定分片数量
  2. 副本类型选择:根据查询模式选择合适的副本类型(NRT、TLOG、PULL)
  3. 配置集管理:使用有意义的配置集名称,便于维护

备份策略

  1. 定期备份:建立定期备份计划,使用增量备份节省存储空间
  2. 备份验证:定期验证备份的完整性和可恢复性
  3. 存储位置:使用可靠的共享存储,确保所有节点可访问

运维管理

  1. 异步操作:对大规模操作使用async参数避免超时
  2. 监控集合状态:使用COLSTATUS监控集合健康状况
  3. 快照管理:在重大变更前创建快照,便于快速回滚

性能优化

  1. 领导者平衡:在大型集群中使用REBALANCELEADERS分散负载
  2. 只读模式:在数据迁移期间合理使用只读模式
  3. 节点分布:合理配置createNodeSet实现负载均衡

这些集合管理命令为SolrCloud提供了完整的集合生命周期管理功能,正确使用这些命令可以确保集合的高可用性、数据安全性和最佳性能。

© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero