在Asp.netcore 上使用ElasticSearch

1.安装 NuGet 包,搜索 Nest 并安装

在 Asp.netcore 上使用 ElasticSearch

如上图:选择最新稳定版本安装,[当时是:6.7.0 版本]

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

2.开始使用

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

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




 /// <summary>
 /// 访问 ElasticSearch 服务接口类
 /// </summary>
 public interface 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 分享
图片正在生成中,请稍后...