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

时间:2013-03-28 09:23:12

标签: solr sharding solrj

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

/ solr的/管理/集动作= CREATE&安培;名称= collection10&安培; numShards = 2及replicationFactor = 2

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

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

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

3 个答案:

答案 0 :(得分:7)

问题的一个解决方案是在创建集合时使用“隐式路由器”。

Solr支持通过“隐式路由器”配置(CREATE COLLECTION API)将新碎片(或DELETE现有碎片)添加到索引(无论何时)的功能。

让我们说 - 您必须将应用程序的所有“审计跟踪”数据编入索尔。每天都会添加新数据。你可能最想在一年之前进行分片。

在初次设置收藏时,您可以执行以下操作:

admin/collections?
action=CREATE&
name=AuditTrailIndex&
router.name=implicit&
shards=2010,2011,2012,2013,2014&
router.field=year

以上命令: 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

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

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

2015年,如果您认为自己不需要2010分片(基于数据保留要求) - 您可以随时使用DELETESHARD API:

/admin/collections?
action=DELETESHARD&
shard=2015&
collection=AuditTrailIndex

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

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

Elastic Search中是否提供此功能。如果没有,我相信他们会及时。

答案 1 :(得分:1)

现在可以使用Solr 4.4.0(4.3中引入的功能):

https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-SplitaShard

答案 2 :(得分:0)

目前,您无法在收集后添加新分片

https://issues.apache.org/jira/browse/SOLR-3755