十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法
.net core操作ES进行读写数据操作
在Package包项目下,新增NEST包。注意,包版本需要和使用的ES的版本保持一致,可以避免因为不兼容所导致的一些问题。例如我本机使用的ES版本是7.13版本,所以我安装的NEST包也是7.13版本:
在Common文件夹下,新建类库项目 Wsk.Core.ElasticSearch,并新建类ElasticSearchConnection,用于提供一些操作方法。以及新建一个对应的接口IElasticSearchConnection。然后引用包项目,以及AppHelper项目备用:
在Entity项目下,新建一个ES配置实体类,叫ElasticConnectionInfo,以及在appsettings配置文件下,新增一组ES的连接配置信息,包括索引和url地址:
代码:
public class ElasticConnectionInfo
{
public string Url { get; set; }
public string Index { get; set; }
}
"ES": [
{
"Index": "wesky",
"Url": "http://localhost:9200"
}
]
然后,在ElasticSearchConnection类下面,添加一些构造依赖注入,以及添加一个连接方法ESConnection:
接着新建一个实体类 ElasticTestDataInfo,用于做一个模拟数据测试:
代码:
public class ElasticTestDataInfo
{ public int Code { get; set; }
public string Function { get; set; }
public string Message { get; set; } }
现在,在启动项目下面,新建文件夹WskHostedService,用于存放启动项有关内容。以及新建一个类,叫InitialService,并且继承自 IHostedService, IDisposable:
该方法是用于项目启动时候执行的,我们把连接ES的部分,写到这里面来。似乎接口用不到,把ElasticSearchConnection继承的IElasticSearchConnection屏蔽掉,然后把ESConnection方法设置为静态的,然后在上面创建的类中的StartAsync下面,进行ES的初始化连接:
然后在WskService类里面,通过使用AddHostedService添加对该初始化服务的注册:
现在配置完毕,在控制器里面,分别添加单个写入和批量写入的api,大概内容如下:
我配置文件里面的索引是wesky,为了确保实验效果,我先使用kibana的页面进行查询是否wesky索引是否有内容:
没有wesky索引,可以开始启动程序(备注:正常使用期间不需要删除索引,会导致写入的数据丢失,我此处只是为了方便效果验证使用)。
先启动程序,为了查看连接是否成功,我把连接成功信息打印出来:
至此,连接ES部分的类代码如下:


public class ElasticSearchConnection
{
public static ElasticClient _esClient; //private readonly ILogger<ElasticSearchConnection> _logger;
//public ElasticSearchConnection(ILogger<ElasticSearchConnection> logger)
//{
// _logger = logger;
//} public static void ESConnection()
{
List<ElasticConnectionInfo> configInfo = AppHelper.ReadAppSettings<ElasticConnectionInfo>(new string[] { "ES" });
if (configInfo.Any())
{
var settings = new ConnectionSettings(new Uri(configInfo.FirstOrDefault().Url))
.DefaultIndex(configInfo.FirstOrDefault().Index);
_esClient = new ElasticClient(settings);
Console.WriteLine("ES已连接");
}
else
{
Console.WriteLine("ES连接未配置\n");
} } }
现在通过swagger写入一个数据看看效果:
Swagger上面调用成功,我们上kibana页面上进行查询看看是否真的写入成功了:
如图所示,说明写入成功了。接下来测试批量写入的,我们发送两条记录进行测试:
使用kibana页面进行查询,看看是不是都写入成功了:
如上,说明写入成功!需要注意的一点是,写入ES里面,ES默认有1秒时间是查不出来的,需要1秒以后才可以查到记录,对于实时性不是特别高,所以不适合用于做数据库,但是用于对实时性要求不高的数据来说,问题就不大了。
现在不使用kibana进行查询,使用es自带的工具进行查询看看效果:
在es根目录下,bin文件夹下有一个elasticsearch-sql-cli.bat文件,双击即可打开:
该工具可以进行使用SQL语句进行查询,咱来示范下通过它来查询刚刚写入的三个数据。由于索引就是一个表,所以我直接使用 select * from wesky; 进行查询,效果如下:
与常见数据库操作几乎一样,我们来个倒序:
接下来在程序上进行查询,先创建一个查询的api进行调用,然后查询出结果进行打印,内容如下:
运行程序,我输入name,进行匹配,返回查询结果:
出于时间关系,就不再演示显示条数的内容了,各位大佬可以自行测试。
由于ES本身也支持sql查询,所以接下来演示下使用SQL语句进行查询的效果。先新建一个实体类EsSearchSql,里面只有一个query字段,用于存放查询的sql语句使用
然后新增一个api,用于可以在swagger上面输入sql语句进行查询,有关内容如下:
至此,控制器类代码整体如下:


[Route("[controller]/[action]")]
[ApiController]
public class WSKController : ControllerBase
{
private readonly ITestAutofac _autofac;
private readonly ILogger<WSKController> _logger;
private readonly IRedisManage _redis;
private readonly IHttpClientHelper _httpClient;
private readonly IHttpWebRequestHelper _httpWebRequestHelper; public WSKController(ITestAutofac autofac, ILogger<WSKController> logger, IRedisManage redis, IHttpClientHelper httpClient, IHttpWebRequestHelper httpWebRequestHelper) {
_autofac = autofac;
_logger = logger;
_redis = redis;
_httpClient = httpClient;
_httpWebRequestHelper = httpWebRequestHelper;
}
[HttpPost]
public IActionResult IndexSingle([FromBody] ElasticTestDataInfo info)
{
ElasticSearchConnection._esClient.IndexDocument(info); return Ok("OK");
} [HttpPost]
public IActionResult IndexMany([FromBody] List<ElasticTestDataInfo> info)
{ ElasticSearchConnection._esClient.IndexMany<ElasticTestDataInfo>(info); return Ok("OK");
} [HttpPost]
public IActionResult SearchByLinq(string name)
{ var searchResponse = ElasticSearchConnection._esClient.Search<ElasticTestDataInfo>(s => s
.From(0)
.Size(2)
.Query(q => q
.Match(m => m
.Field(f => f.Message)
.Query(name)
)
)
);
var info = searchResponse.Documents; return Ok(info);
} [HttpPost]
public IActionResult SearchBySql(string sql)
{
string res = string.Empty;
try
{
string url = "http://127.0.0.1:9200/_xpack/sql?format=csv"; // format=csv,可以过滤掉其他不需要的内容,仅返回报表格式
EsSearchSql esData = new() { query = sql}; // 赋值对应查询的sql语句
string jsonData = JsonConvert.SerializeObject(esData); res = _httpClient.Post(url, jsonData); // 使用post进行发送查询请求 }
catch(Exception ex)
{
res = ex.Message;
} return Ok(res);
} }
启动程序,我输入 select * from wesky 当作参数进行查询,看下效果:
如上,说明使用SQL查询也成功了。使用两种方法都可以查询,看个人喜好了~~ 同时,如果需要做一些可视化报表什么的,也都是可以使用的。一些更详细的内容,就不再做过多操作了,大佬们可以自己玩,祝大家好运~~
完结,撒花~~欢迎大佬们互动~~
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法的更多相关文章
- elasticsearch基本操作之--使用java操作elasticsearch
/** * 系统环境: vm12 下的centos 7.2 * 当前安装版本: elasticsearch-2.4.0.tar.gz */ es 查询共有4种查询类型 QUERY_AND_FETCH: ...
- 十一、.net core(.NET 6)搭建ElasticSearch(ES)系列之ElasticSearch、head-master、Kibana环境搭建
搭建ElasticSearch+Kibana环境 前提条件:已经配置好JDK环境以及Nodejs环境.如果还未配置,请查看我的上一篇博客内容,有详细配置教程. 先下载ElasticSearch(以下文 ...
- 十八、.net core(.NET 6)搭建ElasticSearch(ES)系列之使用Logstash通过Rabbitmq接收Serilog日志到ES
使用Logstash通过Rabbitmq接收Serilog日志到ES 首先,要部署logstash 为了与前面的ElasticSearch版本保持一致,此处Logstash下载的版本也是7.13.1, ...
- 十四、.net core(.NET 6)搭建ElasticSearch(ES)系列之给ElasticSearch添加SQL插件和浏览器插件
给ES添加SQL插件的方法: 下载SQL插件地址:https://github.com/NLPchina/elasticsearch-sql 当前最新的是7.12版本,我的ES是7.13版本,暂且将 ...
- 十、.net core(.NET 6)搭建ElasticSearch(ES)系列之Java环境搭建和Node.js环境搭建
安装java jdk环境:我此处使用的是jdk16版本.下载地址: https://www.oracle.com/java/technologies/javase-jdk16-downloads.ht ...
- Elasticsearch使用系列-ES简介和环境搭建
一.简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java语言开发的,并 ...
- ES系列十三、Elasticsearch Suggester API(自动补全)
1.概念 1.补全api主要分为四类 Term Suggester(纠错补全,输入错误的情况下补全正确的单词) Phrase Suggester(自动补全短语,输入一个单词补全整个短语) Comple ...
- ES系列十七、logback+ELK日志搭建
一.ELK应用场景 在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制.无论是开发人员还是运维人员都无法准确的定位服务.服务器上面出现的种种问题,也没有高效搜索日志内容 ...
- Elasticsearch笔记五之java操作es
Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...
- asp.net core结合NLog搭建ELK实时日志分析平台
0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍ELK 1.说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp ...
随机推荐
- CH395的FTP Server(主动模式)简单应用参考
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.本篇文章将基于FTP协议 ...
- #根号分治,前缀和,双指针#CF1446D2 Frequency Problem (Hard Version)
题目 给定一个长度为 \(n\) 的序列,问是否存在一个最长的区间使得至少存在两个众数. 分析 实际上 Easy Version 是用来启发大于根号的做法的. 众数可以说有一个性质吧,答案区间中的其中 ...
- #回滚莫队#AT1219 歴史の研究
洛谷题目 AT1219 分析 不满足区间减性质的运算,如最值,就不能用普通莫队求, 考虑回滚莫队,它的核心思想就是若区间在块内直接暴力, 否则将右端点从小到大排序,右端点按普通莫队求,那么左端点由于只 ...
- 深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓
在本文中,我们将介绍 IoC(控制反转)和 DI(依赖注入)的概念,以及如何在 Spring 框架中实现它们. 什么是控制反转? 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给 ...
- HarmonyOS创作激励计划启动:助力技术创作突破边界
即日起推出HarmonyOS创作激励计划,成功投稿并入选的文章将在HarmonyOS开发者公众号上线,9大技术社区同步宣发,不仅有丰厚稿酬,还有机会赢取创作奖品! 活动时间 即日起-2024年12 ...
- Batch Normalization 和 DropOut
Batch-Normalization https://www.cnblogs.com/guoyaohua/p/8724433.html 有几点需要注意: \(x^{(k)}\)指的是t层的输入. 也 ...
- 重新整理数据结构与算法(c#)——算法套路普利姆算法[二十九]
前言 看一个题目: 这个问题就是求最小生成树,是图转换为树的一种方式. 最小生成树概念: 最小生成树简称MST. 1.n个顶点,一定有n-1条边 2.包含全部顶点. 3.图转换为最小生成树,权重之和最 ...
- 把 Maven 提交到项目?Maven Wrapper的使用与好处
本文收录于 Github.com/niumoo/JavaNotes,Java 系列文档,数据结构与算法! 本文收录于网站:https://www.wdbyte.com/,我的公众号:程序猿阿朗 前言 ...
- Oracle 与当前日期有关的内容
Oracle 与当前日期有关的内容 求当前日期是周几: 大概就是下面这种方法 to_char(date,'D') Select to_char(date,'ss') from dual取当前时间秒部分 ...
- Helm Chart 多环境、多集群交付实践,透视资源拓扑和差异
简介: 在本文中,我们将介绍如何通过 KubeVela解决多集群环境下 Helm Chart 的部署问题.如果你手里没有多集群也不要紧,我们将介绍一种仅依赖于 Docker 或者 Linux 系统的轻 ...