安装 NuGet 包,搜索 Nest 并安装
如上图:选择最新稳定版本安装
注:操作 Json 的话 还要下载一个 Newtonsoft.Json 包
开始使用
这里是以服务的方式进行实现的,经过测试 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
© 版权声明
博主的文章没有高度、深度和广度,只是凑字数。利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章!如若有侵权,请联系博主删除。
喜欢就点个赞吧