应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.NET Core使用ElasticSearch 四:批量操作,批量更新添加等

8798人阅读 2021/7/14 17:20 总访问:5203843 评论:0 收藏:0 手机
分类: .NET Core


ElasticSearch批量更新

原生API

  1. POST users/_bulk
  2. {"update":{"_id":"1"}}
  3. {"doc":{"message":"测试一下...."}}
  4. {"update":{"_id":"2"}}
  5. {"doc":{"message":"测试一下...."}}

执行效果如下:

有些时候如果代码执行有问题,我们可以先用原生的语句执行试试,让原生的语句能够成功执行后在去分析代码调用的问题,因为代码调用其实不过就是使用代码去执行这些原生语句而已


.net core调用执行:
格式一定要对,如果是这种的,这个user的格式就有问题

像这样就可以了,id在update上面提供了,doc哪里就不需要提供了,否则反而会报错


封装的代码:

  1. /// <summary>
  2. /// 批量更新文档
  3. /// </summary>
  4. /// <param name="indexName">索引名称</param>
  5. /// <param name="listDocment">数据集合,注意需要提供更新的id</param>
  6. /// <returns></returns>
  7. public static async Task<boolBatchUpdateDocumentByBulkAsync(this IElasticSearchServer elasticSearchServer, string indexName, List<object> listDocment)
  8. {
  9.     bool flag = false;
  10.     try
  11.     {
  12.         List<string> list = new List<string>();
  13.         foreach (var objectDocment in listDocment)
  14.         {
  15.             string json = JsonConvert.SerializeObject(objectDocment);
  16.             JToken docment = null;
  17.             var objectDocmentOne = JToken.Parse(json);
  18.             docment = objectDocmentOne;
  19.             if (json.IndexOf("[") == 0)
  20.             {
  21.                 json = JsonConvert.SerializeObject(objectDocmentOne[0]);
  22.                 docment = objectDocmentOne[0];
  23.             }
  24.             string _id = docment["id"].ToString();
  25.             int idInt = json.IndexOf("\"id");
  26.             //去掉doc下面的json,因为id在update上面提供了,doc哪里就不需要提供了,否则反而会报错
  27.             if (idInt > 0)
  28.             {
  29.                 string idJson = json.Substring(idInt, json.IndexOf(_id) + _id.Length);
  30.                 json = json.Replace(idJson, "");
  31.             }
  32.             list.Add("{\"update\":{\"_id\":\"" + _id + "\"}}");
  33.             list.Add("{\"doc\":" + json + "}");
  34.         }
  35.         var stringRespones = await elasticSearchServer.ElasticJsonClient.BulkAsync<StringResponse>(indexName.ToLower(), PostData.MultiJson(list));
  36.         var resObj = JObject.Parse(stringRespones.Body);
  37.         if (!(bool)resObj["errors"])
  38.         {
  39.             return true;
  40.         }
  41.     }
  42.     catch (Exception ex)
  43.     {
  44.     }
  45.     return flag;
  46. }

action调用代码:

  1. /// <summary>
  2. /// 批量更新文档
  3. /// </summary>
  4. /// <returns></returns>
  5. public async Task<boolBatchUpdateDocumentByBulk()
  6. {
  7.     List<object> contens = new List<object>()
  8.     {
  9.         new
  10.         {
  11.             id=1,
  12.             user = "嘻嘻_批量更新",
  13.             post_date = "2021-10-11T15:00:12",
  14.             message = "批量更新_id_1"
  15.         },
  16.         new
  17.         {
  18.             id=2,
  19.             user = "xxx_批量更新",
  20.             post_date = "2021-10-11T15:00:12",
  21.             message = "批量更新_id_2"
  22.         }
  23.     };
  24.     bool result = await _elasticSearchServer.BatchUpdateDocumentByBulkAsync("users", contens);
  25.     return result;
  26. }


ElasticSearch批量添加

原生API

  1. ##批量添加
  2. POST users/_bulk
  3. {"index":{"_index":"users","_id":3}}
  4. {"message":"批量添加...."}
  5. {"index":{"_index":"users","_id":4}}
  6. {"message":"批量添加...."}


代码就留一下,自己写了,大同小异


贴一下代码:https://download.tnblog.net/resource/index/6769f2d356784dcd9689882012ad2754

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

net core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...

net core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...