.Netcore上简单使用ElasticSearch(3)

.Netcore 上简单使用 ElasticSearch(3)

 

安装 NuGet 包,搜索 Nest 并安装

.Netcore 上简单使用 ElasticSearch(3)

 

如上图:选择最新稳定版本安装

注:操作 Json 的话 还要下载一个 Newtonsoft.Json 包

 

开始使用

这里是以服务的方式进行实现的,经过测试 ElasticSearch 访问性能最高的是注册成单例服务,请求时要使用异步。这样性能可以提升到极致。

 

(1)创建 IESSever接口类,创建两个 Client,这里一个 client 支持 linq 查询,一个 client 支持 json 查询

///<summary>///访问 ElasticSearch 服务接口///</summary>publicinterface IESSever{   /// <summary>   /// Linq 查询的官方 Client   /// </summary>   IElasticClient ElasticLinqClient { get; set; }
   /// <summary>   /// Js 查询的官方 Client   /// </summary>   IElasticLowLevelClient ElasticJsonClient { get; set; }}

(2)创建 ESSever 实现类,继承上面的接口 如下

///<summary>/// 访问 ElasticSearch 服务类/// </summary>public class ESSever : IESSever{    /// <summary>    /// Linq 查询的官方 Client    /// </summary>    public IElasticClient ElasticLinqClient { get; set; }    /// <summary>    /// Js 查询的官方 Client    /// </summary>    public IElasticLowLevelClient ElasticJsonClient { get; set; }    public ESSever(IConfiguration configuration)    {        var uris = configuration["ElasticSearchContext:Url"].Split(",").ToList().ConvertAll(x => new Uri(x));//配置节点地址,以,分开        var connectionPool = new StaticConnectionPool(uris);//配置请求池        var settings = new ConnectionSettings(connectionPool).RequestTimeout(TimeSpan.FromSeconds(30));//请求配置参数        this.ElasticJsonClient = new ElasticLowLevelClient(settings);//json 请求客户端初始化        this.ElasticLinqClient = new ElasticClient(settings);//linq 请求客户端初始化    }}

 

注:请求配置时,如果 ElasticSearch 需要账号密码时需要把 settings 修改为如下

var settings = new ConnectionSettings(connectionPool).BasicAuthentication("user", "password").RequestTimeout(TimeSpan.FromSeconds(30));

 

(4)注册服务

在 startup 里面在 ConfigureServices 下面添加如下代码即可

services.AddSingleton<IESSever, ESSever>();

 

(5)在Controller中使用

linq 查询如下所示

[Route("api")][ApiController]public class TestController : Controller{    [HttpGet("tessst")]    public async Task<List<Persons>> ElasticTest([FromServices] IESSever eSSever)    {        var list = await eSSever.ElasticLinqClient.SearchAsync<Persons>(                         p => p.Index("persons")                               .Type("Persons")                               .Query(op => op.Match(                                      ss => ss.Field(                                            qq => qq.EnterpriseName == "测试有限责任公司"))));        return list.Documents.ToList();    }}

Json 查询如下所示

[Route("api")][ApiController]public class TestController : Controller{    [HttpGet("test")]    public async Task<JObject> ElasticTest1([FromServices] IESSever eSSever)    {        var jsonobject = new { query = new { match = new { EnterpriseName = "测试有限责任公司" } } };        string json = JsonConvert.SerializeObject(jsonobject);        var stringResponse = await eSSever.ElasticJsonClient.SearchAsync<StringResponse>("persons", "Persons", json);        return JObject.Parse(stringResponse.Body);    }}

简单使用在这里就完毕了。

 

原文链接:

https://blog.csdn.net/qq_38762313/article/details/90290284

 

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...