.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"
相关推荐
IT规划师1 小时前
NET10 高并发架构契约与落地实现
架构·.net
公子小六4 小时前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
Elastic 中国社区官方博客5 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
Elasticsearch6 小时前
Kibana 中的人工智能连接器:你的 agent 可调用的 90 多个数据源
elasticsearch
Jeff-Tsai6 小时前
Day 16:JSON-RPC 2.0:协议选型与请求管道
.net·架构设计·erp·definition-driven
IT规划师7 小时前
Redis 数据类型全解 - Stream 深度:Pending 回收、重试死信与消息队列选型(十一)
redis·.net
RuoyiOffice19 小时前
KubeSphere 容器云实践:从管理 K8s 到建设企业 PaaS,还需要哪些能力
spring boot·kubernetes·kubesphere·jenkins·paas·微服务部署·ruoyi office
学以智用1 天前
ASP.NET MVC5(.NET Framework)底层完整运行逻辑
.net
学以智用1 天前
FilterAttribute(ASP.NET Core MVC 过滤器特性)
.net
Elasticsearch1 天前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
elasticsearch