如何在solr中将碎片动态添加到集合中?

如何在solr中将碎片动态添加到集合中?,solr,sharding,solrj,Solr,Sharding,Solrj,在创建集合时,使用以下查询,我为collection10设置了两个碎片 /solr/admin/collections?action=CREATE&name=collection10&numShards=2&replicationFactor=2 但我的要求是,在前两个分片中索引了10000个文档之后,我必须动态添加第三个分片 一旦我们在现有碎片上开始收集和索引,是否可以动态添加碎片?如果可能的话,意味着在我们开始收集后如何动态添加碎片 此外,是否可以在开始收集后动态添加副本。例如,我设置了re

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

/solr/admin/collections?action=CREATE&name=collection10&numShards=2&replicationFactor=2

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

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


此外,是否可以在开始收集后动态添加副本。例如,我设置了
replicationFactor=2
,然后我需要为已启动的收集启动新的复制。有可能吗?如果是这样的话,怎么做?

目前,一旦收集完成,您就不能添加新的碎片


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


解决此问题的一个方法是在创建收藏时使用“隐式路由器”

Solr支持通过“隐式路由器”配置(创建集合API)将新碎片(或删除现有碎片)添加到索引中(只要您愿意)

比方说,您必须将应用程序的所有“审计跟踪”数据索引到Solr中。每天都会添加新数据。你可能很想一年一次地分一次

在收藏的初始设置过程中,您可以执行以下操作:

admin/collections?
action=CREATE&
name=AuditTrailIndex&
router.name=implicit&
shards=2010,2011,2012,2013,2014&
router.field=year
上述命令: a) 创建5个碎片-当前和过去4年各一个2010201120012014 b) 根据“年”字段(指定为router.field)的值将数据路由到正确的分片

2014年12月,您可能会使用CREATESHARD API(集合API的一部分)添加一个新的shard,为2015年做准备—执行以下操作:

/admin/collections?
action=CREATESHARD&
shard=2015&
collection=AuditTrailIndex
上面的命令在同一集合上创建一个新的碎片

到2015年时,所有数据都将自动索引到“2015”碎片中,前提是您的数据的“年份”字段填充正确到2015年

2015年,如果您认为不需要2010年的shard(基于您的数据保留要求),您可以随时使用DELETESHARD API来实现这一点:

/admin/collections?
action=DELETESHARD&
shard=2015&
collection=AuditTrailIndex
另外,只有在创建收藏时使用“隐式路由器”,此解决方案才有效。使用默认的“compositeId路由器”(即使用numshards参数创建的集合)时不起作用

这项功能是真正的游戏规则改变者-允许根据您不断增长的业务需求动态添加碎片


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

现在似乎已经解决:)这确实是我在stackoverflow上找到的关于sole cloud中文档路由的最有用的帖子。在任何地方都很难找到好的例子。非常感谢你分享这个。