.Netcore上简单使用ElasticSearch(3)

640?wx_fmt=png

安装NuGet包,搜索Nest 并安装

640?wx_fmt=png

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

注:操作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

640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值