azure-cognitive-search - 带有单个文档的 IndexBatch 操作会抛出 IndexBatchException 吗?
问题描述
IndexBatchException
文档,例如,在调用IndexAsync
时指出:
当某些索引操作失败但其他操作成功并修改了索引的状态时抛出。当搜索服务处于繁重的索引负载下时,可能会发生这种情况。显式捕获此异常并检查其 IndexResult 属性非常重要。此属性报告批处理中每个索引操作的状态,从而可以确定部分失败后的索引状态。
这是否意味着当 ? 中只有一个文档时可以安全地忽略此异常IndexBatch
?IndexBatch
因为,只有一个文档似乎不可能部分失败。
解决方案
我尝试使用包含要更新的单个文档IndexAsync
的Merge
批处理调用,但使用不存在的文档密钥(如 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
被触发,这与以两种方式记录的行为不同:
- “当某些索引操作失败但其他操作成功并修改了索引的状态时抛出。” 相反,当任何操作失败时都会引发异常。
- “当搜索服务处于繁重的索引负载下时,可能会发生这种情况。” 这也可能发生在不正确的请求上。
但是,FindFailedActionsToRetry
它似乎足够聪明,不会建议重试由于错误请求而失败的请求。上面的代码示例中的toRetry
枚举为空。
简而言之,不,不能安全地忽略此异常。该文档具有误导性,如果更新它会很好。
推荐阅读
- javascript - 运行 main.js 和 require.js 文件的 python 代码
- python - 覆盆子 GSM 模型无法工作
- javascript - 如何使用 JS 将整个 HTML 字符串替换为另一个 HTML 字符串
- javascript - BroadcastChannel 与 localStorage - 兼容性
- java - 哈希映射,无序键
- javascript - 使用 requirejs 的 Openlayer 集群
- out-of-memory - 读取具有 1M 行和 900Mo 大小的 csv 文件时出现 Spring Batch OutOfMemoryException
- javascript - 使用 chart.js 设置不均匀的刻度步长间距
- java - Java / OS如何检测视口上的点击坐标?
- google-app-engine - DataFlow 作业完成时如何通知