如何动态地将分片添加到solr中的集合?

gan*_*ran 2 solr sharding solrj

在创建集合时使用以下查询,我为其设置了两个分片collection10.

/ Solr的/管理/集合?行动=创建和名称= collection10&numShards = 2&replicationFactor = 2

但是我的要求是,在前两个分片中索引10000个文档之后,我必须动态添加第三个分片.

一旦我们开始收集并在现有分片上建立索引,是否可以动态添加分片?如果可能意味着如何在我们开始收集后动态添加分片?

而且,一旦我们开始收集,是否可以动态添加副本.例如我设置replicationFactor=2,然后我需要为已经开始的集合启动新的复制.有可能吗?如果是这样,该怎么办?

小智 8

该问题的一个解决方案是在创建集合时使用"隐式路由器".

Solr确实支持通过"隐式路由器"配置(CREATE COLLECTION API)将新碎片(或DELETE现有碎片)添加到索引(无论何时).

让我们说 - 你必须将你的应用程序的所有"审计跟踪"数据索引到Solr.每天都会添加新数据.您可能最想要按年度分片.

在初始设置集合期间,您可以执行以下操作:

admin/collections?
action=CREATE&
name=AuditTrailIndex&
router.name=implicit&
shards=2010,2011,2012,2013,2014&
router.field=year
Run Code Online (Sandbox Code Playgroud)

上面的命令:a)创建5个分片 - 当前和最后4年分别为2010,2011,2012,2013,2014 b)根据"年"字段的值将数据路由到正确的分片(指定为router.field)

在2014年12月,您可以使用CREATESHARD API(Collections API的一部分)添加新的分片以准备2015年 - 执行以下操作:

/admin/collections?
action=CREATESHARD&
shard=2015&
collection=AuditTrailIndex
Run Code Online (Sandbox Code Playgroud)

上面的命令在同一个集合上创建一个新的分片.

在2015年,假设您的数据在2015年正确填充"年"字段,所有数据将自动编入"2015"分片.

在2015年,如果您认为不需要2010分片(基于您的数据保留要求) - 您可以始终使用DELETESHARD API来执行此操作:

/admin/collections?
action=DELETESHARD&
shard=2015&
collection=AuditTrailIndex
Run Code Online (Sandbox Code Playgroud)

PS此解决方案仅在您创建集合时使用"隐式路由器"时才有效.使用默认的"compositeId路由器"时不起作用 - 即使用numshards参数创建的集合.

此功能确实是一个游戏转换器 - 允许根据您业务不断增长的需求动态添加分片.

此功能是否在弹性搜索中可用.如果没有,我相信他们会及时.