排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256
50010702506256
欢迎加群交流技术
分类:
.NET Core
ElasticSearch批量更新
原生API
POST users/_bulk
{"update":{"_id":"1"}}
{"doc":{"message":"测试一下...."}}
{"update":{"_id":"2"}}
{"doc":{"message":"测试一下...."}}执行效果如下:
有些时候如果代码执行有问题,我们可以先用原生的语句执行试试,让原生的语句能够成功执行后在去分析代码调用的问题,因为代码调用其实不过就是使用代码去执行这些原生语句而已
.net core调用执行:
格式一定要对,如果是这种的,这个user的格式就有问题
像这样就可以了,id在update上面提供了,doc哪里就不需要提供了,否则反而会报错
封装的代码:
/// <summary>
/// 批量更新文档
/// </summary>
/// <param name="indexName">索引名称</param>
/// <param name="listDocment">数据集合,注意需要提供更新的id</param>
/// <returns></returns>
public static async Task<bool> BatchUpdateDocumentByBulkAsync(this IElasticSearchServer elasticSearchServer, string indexName, List<object> listDocment)
{
bool flag = false;
try
{
List<string> list = new List<string>();
foreach (var objectDocment in listDocment)
{
string json = JsonConvert.SerializeObject(objectDocment);
JToken docment = null;
var objectDocmentOne = JToken.Parse(json);
docment = objectDocmentOne;
if (json.IndexOf("[") == 0)
{
json = JsonConvert.SerializeObject(objectDocmentOne[0]);
docment = objectDocmentOne[0];
}
string _id = docment["id"].ToString();
int idInt = json.IndexOf("\"id");
//去掉doc下面的json,因为id在update上面提供了,doc哪里就不需要提供了,否则反而会报错
if (idInt > 0)
{
string idJson = json.Substring(idInt, json.IndexOf(_id) + _id.Length);
json = json.Replace(idJson, "");
}
list.Add("{\"update\":{\"_id\":\"" + _id + "\"}}");
list.Add("{\"doc\":" + json + "}");
}
var stringRespones = await elasticSearchServer.ElasticJsonClient.BulkAsync<StringResponse>(indexName.ToLower(), PostData.MultiJson(list));
var resObj = JObject.Parse(stringRespones.Body);
if (!(bool)resObj["errors"])
{
return true;
}
}
catch (Exception ex)
{
}
return flag;
}action调用代码:
/// <summary>
/// 批量更新文档
/// </summary>
/// <returns></returns>
public async Task<bool> BatchUpdateDocumentByBulk()
{
List<object> contens = new List<object>()
{
new
{
id=1,
user = "嘻嘻_批量更新",
post_date = "2021-10-11T15:00:12",
message = "批量更新_id_1"
},
new
{
id=2,
user = "xxx_批量更新",
post_date = "2021-10-11T15:00:12",
message = "批量更新_id_2"
}
};
bool result = await _elasticSearchServer.BatchUpdateDocumentByBulkAsync("users", contens);
return result;
}
ElasticSearch批量添加
原生API
##批量添加
POST users/_bulk
{"index":{"_index":"users","_id":3}}
{"message":"批量添加...."}
{"index":{"_index":"users","_id":4}}
{"message":"批量添加...."}
代码就留一下,自己写了,大同小异
贴一下代码:https://download.tnblog.net/resource/index/6769f2d356784dcd9689882012ad2754
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价