C# 为什么azure search在索引结果中没有失败的情况下抛出IndexBatchException

C# 为什么azure search在索引结果中没有失败的情况下抛出IndexBatchException,c#,azure,azure-cognitive-search,azure-search-.net-sdk,C#,Azure,Azure Cognitive Search,Azure Search .net Sdk,在我的微服务(负责根据事件消息将数据输入azure搜索实例)中,我正在尝试合并或上载IndexBatch。批大小始终为1,因为一条事件消息只包含一个我需要在搜索中合并或上载的实体 我一直在获取IndexBatchException,该异常不包含索引结果,其中Successed为false Azure搜索服务详细信息 级别:标准 分区和副本:3和3 微服务详细信息 Asp.Net核心版本:2.2 Microsoft.Azure.Search SDK版本:9.0.1 目前,我的代码已设置为通

在我的微服务(负责根据事件消息将数据输入azure搜索实例)中,我正在尝试合并或上载IndexBatch。批大小始终为1,因为一条事件消息只包含一个我需要在搜索中合并或上载的实体

我一直在获取IndexBatchException,该异常不包含索引结果,其中Successed为false

Azure搜索服务详细信息
  • 级别:标准
  • 分区和副本:3和3
微服务详细信息
  • Asp.Net核心版本:2.2
  • Microsoft.Azure.Search SDK版本:9.0.1
目前,我的代码已设置为通过在服务总线上重新排队消息来处理IndexBatchException,并在未来~5秒内安排交付。收到此重新排队的消息后,我的代码拒绝处理此事件消息,因为它发现消息日期时间不晚于搜索实例中的数据

我意识到,如果IndexingResults失败,我可以将异常处理更改为仅重试,但我想了解IndexBatchException不包含IndexingResults(如果成功)的真正原因是错误的,以及社区建议做什么。。请注意,操作本身是成功的,因为每次第一次尝试时都会上载数据

我还可以确认azure search实例未加载,并且未超过其任何限制

代码示例
我希望只有在搜索加载时才会出现索引批处理异常,即使是这样,我也希望它会抛出此异常并产生一些失败的结果。

服务会按预期返回索引结果,但您的代码中有一个小错误。错误的提示出现在“0”中,该“0”在“未能索引某些文档:0”中返回。如果代码按预期运行,它将是一个空字符串。您需要删除字符串上的$,该字符串将{0}作为c#表达式而不是字符串格式标记进行计算

应改为:

logger.LogError("Failed to index some of the documents: {0}", string.Join(", ", indexBatchException.IndexingResults.Where(r => !r.Succeeded).Select(r => $"{r.Key}:{r.ErrorMessage}")));

感谢Corom的反馈。在记录修复后,我们意识到错误是搜索服务在1次合并尝试后抛出的409冲突,该尝试由于并发控制而失败。重试成功,文档按预期添加到搜索中。
catch (IndexBatchException indexBatchException)
    {
        logger.LogError($"Failed to index some of the documents: {0}", string.Join(", ", indexBatchException.IndexingResults.Where(r => !r.Succeeded).Select(r => $"{r.Key}:{r.ErrorMessage}")));
        throw;
    }
logger.LogError("Failed to index some of the documents: {0}", string.Join(", ", indexBatchException.IndexingResults.Where(r => !r.Succeeded).Select(r => $"{r.Key}:{r.ErrorMessage}")));