.net core操作ES进行读写数据操作
在Package包项目下,新增NEST包。注意,包版本需要和使用的ES的版本保持一致,可以避免因为不兼容所导致的一些问题。例如我本机使用的ES版本是7.13版本,所以我安装的NEST包也是7.13版本:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 在Common文件夹下,新建类库项目 Wsk.Core.ElasticSearch,并新建类ElasticSearchConnection,用于提供一些操作方法。以及新建一个对应的接口IElasticSearchConnection。然后引用包项目,以及AppHelper项目备用:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 在Entity项目下,新建一个ES配置实体类,叫ElasticConnectionInfo,以及在appsettings配置文件下,新增一组ES的连接配置信息,包括索引和url地址:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 代码:
然后,在ElasticSearchConnection类下面,添加一些构造依赖注入,以及添加一个连接方法ESConnection:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 接着新建一个实体类 ElasticTestDataInfo,用于做一个模拟数据测试:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 代码:
现在,在启动项目下面,新建文件夹WskHostedService,用于存放启动项有关内容。以及新建一个类,叫InitialService,并且继承自 IHostedService, IDisposable:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 该方法是用于项目启动时候执行的,我们把连接ES的部分,写到这里面来。似乎接口用不到,把ElasticSearchConnection继承的IElasticSearchConnection屏蔽掉,然后把ESConnection方法设置为静态的,然后在上面创建的类中的StartAsync下面,进行ES的初始化连接:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 然后在WskService类里面,通过使用AddHostedService添加对该初始化服务的注册:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 现在配置完毕,在控制器里面,分别添加单个写入和批量写入的api,大概内容如下:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 我配置文件里面的索引是wesky,为了确保实验效果,我先使用kibana的页面进行查询是否wesky索引是否有内容:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 没有wesky索引,可以开始启动程序(备注:正常使用期间不需要删除索引,会导致写入的数据丢失,我此处只是为了方便效果验证使用)。
先启动程序,为了查看连接是否成功,我把连接成功信息打印出来:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 至此,连接ES部分的类代码如下:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 View Code
现在通过swagger写入一个数据看看效果:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 Swagger上面调用成功,我们上kibana页面上进行查询看看是否真的写入成功了:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 如图所示,说明写入成功了。接下来测试批量写入的,我们发送两条记录进行测试:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 使用kibana页面进行查询,看看是不是都写入成功了:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 如上,说明写入成功!需要注意的一点是,写入ES里面,ES默认有1秒时间是查不出来的,需要1秒以后才可以查到记录,对于实时性不是特别高,所以不适合用于做数据库,但是用于对实时性要求不高的数据来说,问题就不大了。
现在不使用kibana进行查询,使用es自带的工具进行查询看看效果:
在es根目录下,bin文件夹下有一个elasticsearch-sql-cli.bat文件,双击即可打开:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 该工具可以进行使用SQL语句进行查询,咱来示范下通过它来查询刚刚写入的三个数据。由于索引就是一个表,所以我直接使用 select * from wesky; 进行查询,效果如下:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 与常见数据库操作几乎一样,我们来个倒序:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 接下来在程序上进行查询,先创建一个查询的api进行调用,然后查询出结果进行打印,内容如下:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 运行程序,我输入name,进行匹配,返回查询结果:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 出于时间关系,就不再演示显示条数的内容了,各位大佬可以自行测试。
由于ES本身也支持sql查询,所以接下来演示下使用SQL语句进行查询的效果。先新建一个实体类EsSearchSql,里面只有一个query字段,用于存放查询的sql语句使用
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 然后新增一个api,用于可以在swagger上面输入sql语句进行查询,有关内容如下:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 至此,控制器类代码整体如下:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 启动程序,我输入 select * from wesky 当作参数进行查询,看下效果:
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法 如上,说明使用SQL查询也成功了。使用两种方法都可以查询,看个人喜好了~~ 同时,如果需要做一些可视化报表什么的,也都是可以使用的。一些更详细的内容,就不再做过多操作了,大佬们可以自己玩,祝大家好运~~
完结,撒花~~欢迎大佬们互动~~
欢迎加入QQ群:
群号:1079830632
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法