当前位置: 首页 > news >正文

【微服务】.NET8对接ElasticSearch

目录

一、目的

二、对接方案

2.1 环境准备

2.2 引入NEST

2.3 添加一个对象

2.4 添加一个集合

2.5 Sql语句查询

2.6 Sql语句查询支持分词字段查询

三、文章总结


一、目的

        实现使用.Net8下对接ElasticSearch7.16.3单机和集群环境,使用Nuget引入NEST包,支持

.NET 5+和.NET Framework 4.6.1+

        

二、对接方案

2.1 环境准备

        Sql的查询,IK分词器的支持。
        环境: ES: 7.16.3 有Sql查询的插件+ IK分词的版本支持
        ES镜像: docker.elastic.co/elasticsearch/elasticsearch:7.16.3
        Kibana镜像:docker.elastic.co/kibana/kibana:7.16.3

        相关安装可参考下方博客:

[微服务]ELK Stack安装与配置全指南-CSDN博客

2.2 引入NEST

        Nuget引入程序集:NEST

   dotnet add packages NEST

        配置连接ES

    //链接配置//配置默认的索引--索引的名称--不能包含大写的字母ConnectionSettings settings = new ConnectionSettings(new Uri("http://ip:9200")).DefaultIndex("myindex");  //索引:DefaultIndexElasticClient client = new ElasticClient(settings);

2.3 添加一个对象

public static void InsertObject(){var settings = new ConnectionSettings(new
Uri(UrlConstant.BaseUrl)).DefaultIndex("traceinfolog");//添加数据{TraceInfo traceInfo = new TraceInfo(){RpcID = Guid.NewGuid().ToString(),Message = "message",Time = DateTime.Now};var client = new ElasticClient(settings);client.IndexDocument(traceInfo);}}

2.4 添加一个集合

public static void InsertObjectList(){var settings = new ConnectionSettings(new Uri(UrlConstant.BaseUrl)).DefaultIndex("order");var client = new ElasticClient(settings);List<OrderInfo> orderInfos = new List<OrderInfo>();for (int i = 0; i < 20; i++){orderInfos.Add(new OrderInfo(){Orderid = Guid.NewGuid().ToString(),ActionTime = DateTime.UtcNow.AddMinutes(-15),Name = "test" + i,Address = "测试1",Status = "购物车"});}for (int i = 0; i < 20; i++){orderInfos.Add(new OrderInfo(){Orderid = Guid.NewGuid().ToString(),ActionTime = DateTime.UtcNow.AddMinutes(-20),Name = "test" + i,Address = "测试2",Status = "支付"});}for (int i = 0; i < 20; i++){orderInfos.Add(new OrderInfo(){Orderid = Guid.NewGuid().ToString(),ActionTime = DateTime.UtcNow.AddMinutes(-2),Name = "test" + i,Address = "测试2",Status = "未支付"});}for (int i = 0; i < 20; i++){orderInfos.Add(new OrderInfo(){Orderid = Guid.NewGuid().ToString(),ActionTime = DateTime.UtcNow.AddMinutes(-9),Name = "test" + i,Address = "测试3",Status = "已配送"});}BulkResponse response= client.IndexMany(orderInfos);if (response.IsValid){Console.WriteLine("批量添加成功~");}}

2.5 Sql语句查询

        注意:_xpack/sql?format=csv 查询,不能把带有索引的字段当做查询字段或者where条件字段

//_xpack/sql?format=csv 方法
public static string Post(QueryParam queryParam, string baserUrl){string url = $"{baserUrl}_xpack/sql?format=csv";HttpWebRequest request = null;try{request = (HttpWebRequest)WebRequest.Create(url);var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(queryParam));//request.Accept = "application/json; charset=UTF-8"; // 设置响应数据的
ContentTyperequest.Method = "POST";request.ContentType = "application/json"; // 设置请求数据的ContentTyperequest.ContentLength = data.Length;request.Timeout = 90000;using (var stream = request.GetRequestStream())   // 设置入参{stream.Write(data, 0, data.Length);}var response = (HttpWebResponse)request.GetResponse(); // 发送请求using (var resStream = response.GetResponseStream()) // 读取出参{using (var reader = new StreamReader(resStream, Encoding.UTF8)){return reader.ReadToEnd();}}}catch (Exception ex){return null;}finally{if (request != null) request.Abort(); // 释放连接}}

2.6 Sql语句查询支持分词字段查询

        解决2.5中无法查询带分词索引字段的问题。添加插件,下载后解决,然后Docker挂载。挂载方法可以查看上述上一篇博文。

        下载地址:

https://github.com/NLPchina/elasticsearch-sql/releases/

        注意:这里需要匹配ElasticSearch-sql和ElasticSearch的版本;

插叙测试方法:

public static string Post(string queryParam, string baserUrl){string url = $"{baserUrl}_nlpcn/sql";HttpWebRequest request = null;try{request = (HttpWebRequest)WebRequest.Create(url);var data = Encoding.UTF8.GetBytes(queryParam);request.Accept = "application/json; charset=UTF-8"; // 设置响应数据的ContentTyperequest.Method = "POST";request.ContentType = "application/json"; // 设置请求数据的ContentTyperequest.ContentLength = data.Length;request.Timeout = 90000;using (var stream = request.GetRequestStream()) // 设置入参{stream.Write(data, 0, data.Length);}var response = (HttpWebResponse)request.GetResponse(); // 发送请求using (var resStream = response.GetResponseStream()) // 读取出参{using (var reader = new StreamReader(resStream, Encoding.UTF8)){return reader.ReadToEnd();}}}catch (Exception ex){return null;}finally{if (request != null) request.Abort();}
}

三、文章总结

        本文主要讲解.Net对接ES的相关方法,并通过相关示例说明查询ES的方式。其实主要方法还是通过Http请求ES。

http://www.lryc.cn/news/621778.html

相关文章:

  • 华为实验综合小练习
  • 从源码到可执行文件:hello.c 的二进制之旅
  • Python从入门到高手9.3节: 利用字典进行格式化
  • GoLand深度解析:智能开发利器与cpolar内网穿透方案的协同实践
  • 配置国内加速源后仍然无法拉取镜像
  • Vue2与Vue3生命周期函数全面解析:从入门到精通
  • 【自动驾驶】自动驾驶概述 ② ( 自动驾驶技术路径 | L0 ~ L5 级别自动驾驶 )
  • Linux软件编程(五)(exec 函数族、system、线程)
  • Unity导航寻路轨迹可视化实现
  • Unity_数据持久化_Json
  • Ubuntu DNS 综合配置与排查指南
  • 小程序上拉加载下一页数据
  • 基于HTML5与Tailwind CSS的现代运势抽签系统技术解析
  • GEO入门:什么是生成式引擎优化?它与SEO的根本区别在哪里?
  • 流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(中)
  • Fanuc机器人EtherCAT通讯配置详解
  • 【Linux基础知识系列】第九十六篇 - 使用history命令管理命令历史
  • 【机器人】人形机器人“百机大战”:2025年产业革命的烽火与技术前沿
  • Zabbix【部署 01】Zabbix企业级分布式监控系统部署配置使用实例(在线安装及问题处理)程序安装+数据库初始+前端配置+服务启动+Web登录
  • 在 Vue2 中使用 pdf.js + pdf-lib 实现 PDF 预览、手写签名、文字批注与高保真导出
  • 力扣习题:基本计算器
  • Spring 工具类:StopWatch
  • Java 泛型类型擦除
  • 【递归、搜索与回溯算法】DFS解决FloodFill算法
  • Pytest项目_day17(随机测试数据)
  • JUC学习笔记-----LongAdder
  • 2025年最新油管视频下载,附MassTube下载软件地址
  • 嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
  • 嵌入式硬件篇---电容串并联
  • 嵌入式硬件篇---电容滤波