首页 > 解决方案 > 带有单个文档的 IndexBatch 操作会抛出 IndexBatchException 吗?

问题描述

IndexBatchException文档,例如,在调用IndexAsync时指出:

当某些索引操作失败但其他操作成功并修改了索引的状态时抛出。当搜索服务处于繁重的索引负载下时,可能会发生这种情况。显式捕获此异常并检查其 IndexResult 属性非常重要。此属性报告批处理中每个索引操作的状态,从而可以确定部分失败后的索引状态。

这是否意味着当 ? 中只有一个文档时可以安全地忽略此异常IndexBatchIndexBatch因为,只有一个文档似乎不可能部分失败。

标签: azure-cognitive-search

解决方案


我尝试使用包含要更新的单个文档IndexAsyncMerge批处理调用,但使用不存在的文档密钥如 Bruce 推荐的那样):

var nonExistingDocument = SomeDocument()
var work = IndexBatch.Merge( nonExistingDocument );

try
{
    await _search.Documents.IndexAsync( work );
}
catch ( IndexBatchException e )
{
    var toRetry = e.FindFailedActionsToRetry( work, d => d.Id);
}

IndexBatchException被触发,这与以两种方式记录的行为不同:

  1. “当某些索引操作失败但其他操作成功并修改了索引的状态时抛出。” 相反,当任何操作失败时都会引发异常。
  2. “当搜索服务处于繁重的索引负载下时,可能会发生这种情况。” 这也可能发生在不正确的请求上。

但是,FindFailedActionsToRetry 它似乎足够聪明,不会建议重试由于错误请求而失败的请求。上面的代码示例中的toRetry枚举为空。

简而言之,不,不能安全地忽略此异常。该文档具有误导性,如果更新它会很好。


推荐阅读