.net 8 添加swagger以及批量index,批量删除 elasticsearch

想法:

从kafka拉数据推送,因此这里不适用OOM,后续接入kafka。

  1. 安装依赖包
bash 复制代码
   > Elastic.Clients.Elasticsearch      9.2.2    9.2.2 
   > Newtonsoft.Json                    13.0.4   13.0.4
   > Swashbuckle.AspNetCore             10.0.1   10.0.1
  1. 写helper
csharp 复制代码
using Elastic.Clients.Elasticsearch;
using Elastic.Clients.Elasticsearch.Core.Bulk;
using Elastic.Clients.Elasticsearch.Nodes;
using Elastic.Clients.Elasticsearch.QueryDsl;
using Elastic.Transport;
using Newtonsoft.Json.Linq;
using System.Net;
using System.Text.Json;

namespace ElasticsearchBulkIndex
{
    public class EsHelper
    {
        private readonly ElasticsearchClient _esClient;
        public EsHelper()
        {
           var node =  new SingleNodePool(new Uri("http://192.168.220.130:31200"));

           var settings = new ElasticsearchClientSettings(node).Authentication(new BasicAuthentication("elastic", "password"))
             .EnableDebugMode().DefaultIndex("123");
            _esClient = new ElasticsearchClient(settings);

        }


        public async Task<int> BulkIndex(List<JsonElement> jsonList)
        {

            var bulkRequest = new BulkRequest("index名称")
            {
                Operations = new List<IBulkOperation>()
            };

            foreach (var json in jsonList)
            {

                bulkRequest.Operations.Add(
                    new BulkIndexOperation<JsonElement>(json)
                    {
                        Id = json.TryGetProperty("id", out var id)
                             ? id.GetInt32().ToString()
                             : null
                    }
                );
            }

            BulkResponse response = await _esClient.BulkAsync(bulkRequest);

            Console.WriteLine(response.ElasticsearchServerError);
            Console.WriteLine(response.DebugInformation);
            return response.Items.Count;
        }


        public async Task<bool> BulkDelete(List<string> ids)
        {
            var delete = new DeleteByQueryRequest("index名称")
            {
                Query = new IdsQuery()
                {
                    Values=new Ids(ids)
                }
            };


            DeleteByQueryResponse deleteResponse = await _esClient.DeleteByQueryAsync(delete);

            Console.WriteLine(deleteResponse.DebugInformation);


            Console.WriteLine(deleteResponse.IsSuccess());

            return deleteResponse.IsSuccess();
        }
    }
}
  1. DI以及配置swagger
csharp 复制代码
....
builder.Services.AddControllers();

builder.Services.AddSingleton<EsHelper>();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

....
app.UseAuthorization();

app.UseSwagger();

app.UseSwaggerUI(c =>
{
    c.RoutePrefix = "swagger";
});
app.MapControllers();

app.Run();
  1. 修改launchsetting.json
bash 复制代码
"launchUrl": "swagger"
相关推荐
Elastic 中国社区官方博客3 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
哥是强混5 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
阿里云大数据AI技术7 小时前
Elasticsearch 智能助手:Agent 让运维从经验驱动迈向智能协同
人工智能·elasticsearch·agent
公子小六12 小时前
基于.NET的Windows窗体编程之WinForms图像控件
windows·microsoft·c#·.net·winforms
界面开发小八哥13 小时前
界面控件DevExpress WPF v26.1新版亮点 - TreeView、Spreadsheet控件功能升级
.net·wpf·界面控件·devexpress·ui开发
2301_7803039015 小时前
DevSecOps建设之自动化集成与部署 Jenkins教程和使用案例
运维·自动化·jenkins
脚后跟法16 小时前
.NET热门ORM真实的性能测试总结
jvm·php·.net
贾天佑忆月17 小时前
Mac 本地项目推送至 GitHub 完整指南
elasticsearch·macos·github
望江东浪1 天前
我的 Claude Code 效率工具全套配置分享
大数据·elasticsearch·搜索引擎
无风听海1 天前
深入理解 .NET 中的 ToLowerInvariant:从字符串小写转换看文化敏感性陷阱
.net