.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"); } } }