使用.NET Core控制台程序向Azure Search Index上传文档时覆盖问题
解决Azure Search上传文档列表后仅保留最后一个的问题
出现这个问题的核心原因是你上传的所有文档使用了相同的主键值。Azure Search的IndexDocumentsBatch.Upload操作逻辑是:如果文档的主键在索引中已存在,则执行更新(覆盖)操作;不存在则执行新增。如果5个文档的主键完全重复,最后一个文档会覆盖掉前面所有同主键的文档,最终索引里只剩这一个。
解决步骤:
- 确认你的Azure Search索引的主键字段:登录Azure门户,找到对应的Search服务和索引,查看索引定义里的主键字段(通常是
id,也可能是你自定义的字段)。 - 检查
sampleDocuments集合中每个文档的主键值:确保每个文档的主键都是唯一的,没有重复。 - 修改文档生成逻辑,保证主键唯一性:
比如在生成文档时,给每个文档分配唯一的主键值,示例代码如下:// 假设你的文档类有Id字段作为主键 public class SearchDocument { public string Id { get; set; } // 其他字段... } // 在生成sampleDocuments时确保Id唯一 var sampleDocuments = await GetSampleDocumentsAsync(openAIClient, inputDocuments); foreach (var doc in sampleDocuments) { // 用Guid生成唯一主键,或者根据业务逻辑生成唯一值 doc.Id = Guid.NewGuid().ToString(); } await searchClient.IndexDocumentsAsync(IndexDocumentsBatch.Upload(sampleDocuments)); - 验证结果:上传完成后,调用Search查询所有文档,检查返回的文档数量和主键是否唯一,确认没有覆盖问题。
内容的提问来源于stack exchange,提问作者user26459797
相关产品推荐
相关产品推荐

