elasticsearch bulk批量操作
说明: 在做业务增删改时,有时批量执行比循环中单个执行性能要好很多,在es中有批量执行方法(除了script),如下(.net)代码:
public BulkResponse BulkUpdate(List<IBulkOperation> bulkOperationList) { BulkRequest bulkRequest = new BulkRequest(base._indexName); bulkRequest.Operations = bulkOperationList; return _client.Bulk(bulkRequest); }
_client是指IElasticClient对象,添加Nest包。
下面代码是指:根据索引Ids集合,查询出索引数据,再批量更新SendStatus和时间字段,如下所示:
var models = res.SourceMany<CrawlHqbuyNewsContentEsModel>(Ids).ToList(); var operationList = new List<IBulkOperation>(); var time = DateTime.Now; foreach (var model in models) { model.SendStatus = 1; model.UpdateTime = time.ToString(FormatCharacter.DATETIME); model.UpdateTimeStamp = TimeStampUtil.GenerateTimeStampBySeconds(time); operationList.Add(new BulkIndexOperation<CrawlHqbuyNewsContentEsModel>(model) { Id = model.Id }); } var res2 = _esClient.BulkUpdate(operationList); if (!res2.IsValid) { apiResult.Message = "确认发送状态操作失败,具体咨询开发者!"; LogUtil.NLog.Error("确认发送状态操作失败," + res2.DebugInformation); return apiResult; } var count = res2.Items.ToList().Count; apiResult.Code = StatusCodeEnum.Success; apiResult.Message = $"确认发送状态操作成功,共{count}条!"; LogUtil.NLog.Info($"确认发送状态操作成功,共{count}条!");
上面代码调用BulkIndexOperation为什么会更新索引数据呢,是因为索引中如果该数据Id存在,就会是更新,如果不存在就是新增。当然可以调用相关类:
BulkCreateOperation为新增
BulkDeleteOperation为删除
BulkUpdateOperation为修改
分类:
Elastic
标签:
elasticsearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2022-06-21 云端选型篇
2019-06-21 sql server 下载安装标记
2018-06-21 sql server 索引阐述系列三 表的堆组织