如何通过.NET Core控制台应用向Azure搜索索引迭代批量上传文档
问题原因
IndexDocumentsBatch.Create方法接收的是params IndexDocumentsAction<Hotel>[]类型的参数数组,C#语法不支持直接在方法参数列表中嵌入foreach循环生成参数,因此你的写法会报编译错误。
正确实现方式
方法1:使用LINQ转换(推荐)
先引入LINQ命名空间,直接将酒店列表转换为上传操作数组传入方法:
using System.Linq; // 直接构造上传批次 IndexDocumentsBatch<Hotel> batch = IndexDocumentsBatch.Create( hotels.Select(h => IndexDocumentsAction.Upload(h)).ToArray() );
方法2:手动遍历构造操作集合
如果不想用LINQ,也可以先遍历生成操作集合,再转数组传入:
List<IndexDocumentsAction<Hotel>> uploadActions = new List<IndexDocumentsAction<Hotel>>(); foreach (var hotel in hotels) { uploadActions.Add(IndexDocumentsAction.Upload(hotel)); } IndexDocumentsBatch<Hotel> batch = IndexDocumentsBatch.Create(uploadActions.ToArray());
注意事项
- Azure认知搜索单个文档上传批次最多支持1000个文档,你当前800余条数据可以单次提交,如果后续数据量超过1000需要拆分多个批次分别上传。
- 批次构造完成后调用搜索客户端的
IndexDocumentsAsync方法即可完成提交:
// 假设已完成SearchClient的初始化,命名为searchClient await searchClient.IndexDocumentsAsync(batch);
内容的提问来源于stack exchange,提问作者nkacolz
相关产品推荐
相关产品推荐

