我尝试将相当大的(~200M docs)documentdb导入Azure搜索,但我发现索引器在~24小时后超时。当索引器重新启动时,它会从头开始,而不是从它到达的地方再次启动,这意味着我无法在搜索索引中获得超过~40M的文档。数据源的高水位标记设置如下:
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);
在小型数据库上进行测试时,高水位标记似乎正常工作。
当索引器失败时,是否应该尊重高水位标记,如果不是,我该如何索引这么大的数据集呢?
答案 0 :(得分:1)
即使在24小时后超时(预期24小时执行时间限制),索引器也没有进行增量进度的原因是用户指定的查询(QueryString
参数传递给{{1}使用} constructor)。使用用户指定的查询,我们无法保证,因此不能假设DataContainer
列将对文档的查询响应流进行排序,这是支持增量进度的必要假设。
因此,如果您的方案不需要自定义查询,请考虑不使用它。
或者,考虑对数据进行分区并创建多个写入同一索引的数据源/索引器对。您可以使用Datasource.Container.Query参数提供DocumentDB查询,该查询使用WHERE过滤器对数据进行分区。这样,每个索引器的工作量都会减少,而且如果有足够的分区,则可以满足24小时的限制。此外,如果您的搜索服务具有多个搜索单元,则多个索引器将并行运行,从而进一步增加索引,并减少索引整个数据集的总时间。