【问题标题】:Dealing with Indexer timeout when importing documentdb into Azure Search将 documentdb 导入 Azure 搜索时处理索引器超时
【发布时间】:2016-11-06 06:49:14
【问题描述】:

我正在尝试将一个相当大的(约 2 亿个文档)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);

在小型数据库上进行测试时,高水位标记似乎可以正常工作。

当索引器这样失败时,是否应该尊重高水位线,如果不是,我如何索引这么大的数据集?

【问题讨论】:

    标签: azure-cosmosdb azure-cognitive-search


    【解决方案1】:

    即使在 24 小时后超时(预计 24 小时执行时间限制),索引器也没有取得增量进展的原因是用户指定的查询(传递给 QueryString 构造函数的QueryString 参数)是用过的。对于用户指定的查询,我们不能保证也不能假设文档的查询响应流将按_ts 列排序,这是支持增量进度的必要假设。

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

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

    【讨论】:

    • 谢谢尤金。以这种方式对我的数据进行分区没有明显的方法,因此如果您在此处发现问题,我会密切关注更新。
    • 嗨,Iain,抱歉耽搁了 - 我已经看过这个并更新了答案。如果您还有其他问题,请随时在通常的 Microsoft 域的 eugenesh 与我联系。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2015-07-05
    • 2016-03-29
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多