2

在创建集合时使用以下查询,我为collection10.

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

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

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

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

4

3 回答 3

9

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

Solr 确实支持通过“隐式路由器”配置(CREATE COLLECTION API)将新分片(或删除现有分片)添加到您的索引(无论何时)。

可以说 - 您必须将应用程序的所有“审计跟踪”数据索引到 Solr。每天都会添加新数据。您很可能希望按年分片。

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

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) 根据“年份”字段的值将数据路由到正确的分片(指定为路由器.字段)

在 2014 年 12 月,您可能会使用 CREATESHARD API(集合 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

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

此功能真正改变了游戏规则 - 允许根据您业务不断增长的需求动态添加分片。

此功能在 Elastic Search 中是否可用?如果没有,我相信他们会及时的。

于 2014-02-22T16:29:01.297 回答
1

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

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

于 2013-09-20T00:11:23.817 回答
0

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

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

于 2013-04-17T12:17:00.377 回答