2016-09-19 66 views
0

我试图将相当大(〜200M文档)documentdb导入到Azure搜索中,但我在〜24小时后发现索引器超时。当索引器重新启动时,它会从头开始重新开始,而不是从开始的位置开始,这意味着我无法在搜索索引中获得超过40M的文档。数据源具有如下高水位标记:将Documentdb导入到Azure搜索时处理索引器超时

 var source = new DataSource(); 
     source.Name = DataSourceName; 
     source.Type = DataSourceType.DocumentDb; 
     source.Credentials = new DataSourceCredentials(myEnvDef.ConnectionString); 
     source.Container = new DataContainer(myEnvDef.CollectionName, QueryString); 
     source.DataChangeDetectionPolicy = new HighWaterMarkChangeDetectionPolicy("_ts"); 
     serviceClient.DataSources.Create(source); 

当在小分贝上测试时,高位标记似乎正常工作。

当索引器失败时,是否应该遵守高位标记?如果不是,我该如何索引如此庞大的数据集?

回答

1

索引不使即使在24小时(24小时执行时间限制,预计)后超时增量进展的原因是,用户指定的查询(QueryString参数传递到DataContainer构造)被使用。使用用户指定的查询,我们不能保证并因此不能假定文档的查询响应流将按_ts列进行排序,这是支持渐进式进度的必要假设。

因此,如果您的方案不需要自定义查询,请考虑不要使用它。

或者,考虑划分您的数据并创建多个数据源/索引器对,它们都写入同一个索引。您可以使用Datasource.Container.Query参数来提供一个DocumentDB查询,该查询使用WHERE过滤器对数据进行分区。这样,每个索引者的工作量就会减少,并且具有足够的分区,将会在24小时内满足要求。此外,如果您的搜索服务具有多个搜索单元,则多个索引器将并行运行,进一步增加整个索引并减少索引整个数据集的总时间。

+0

谢谢尤金。以这种方式划分数据的方式并不明显,因此,如果您在此处发现问题,我会密切关注更新。 –

+0

嗨伊恩,对于延迟抱歉 - 我已经看了这个并更新了答案。如果您还有其他问题,请随时通过微软网站eugenesh与我联系。谢谢! –