排名
                
                
                    6
                
            
                    文章
                
                
                    6
                
            
                    粉丝
                
                
                    16
                
            
                    评论
                
                
                    8
                
            
            {{item.articleTitle}}
            
    {{item.blogName}} : {{item.content}}
        
            ICP备案  :渝ICP备18016597号-1
        
        
            网站信息:2018-2025TNBLOG.NET
        
        
            技术交流:群号656732739
        
        
            联系我们:contact@tnblog.net
        
        
            公网安备:
50010702506256
        
    
50010702506256
        
        
            欢迎加群交流技术
        
    
    
    分类:
    .NET Core
Elasticsearch使用版本7.12.0
安装Elasticsearch与kibana可以参考:https://www.tnblog.net/aojiancc2/article/details/5875
使用kibana来进行原生crud可以参考:https://www.tnblog.net/hb/article/details/4918
一:安装.NET CORE操作Elasticsearch的库NEST
<ItemGroup> <PackageReference Include="NEST" Version="7.12.0" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> </ItemGroup>
方法2:
Install-Package NEST -version 7.12.0 Install-Package Newtonsoft.Json -version 13.0.1
NEST库要注意版本和你的Elasticsearch版本要匹配,json库可以选装
二:创建Elasticsearch访问类
1:创建IElasticSearchServer接口,创建两个Client,一个用于linq查询,一个用于json查询
public interface IElasticSearchServer
{
    /// <summary>
    /// Linq查询的官方Client
    /// </summary>
    IElasticClient ElasticLinqClient { get; set; }
    /// <summary>
    /// Js查询的官方Client
    /// </summary>
    IElasticLowLevelClient ElasticJsonClient { get; set; }
}2:创建IElasticSearchServer的实现类
public class ElasticSearchServer : IElasticSearchServer
{
    /// <summary>
    /// Linq查询的官方Client
    /// </summary>
    public IElasticClient ElasticLinqClient { get; set; }
    /// <summary>
    /// Json查询的官方Client
    /// </summary>
    public IElasticLowLevelClient ElasticJsonClient { get; set; }
    public IMemoryCache memoryCache { get; set; }
    public ElasticSearchServer(IConfiguration configuration, IMemoryCache memoryCache_arg)
    {
        memoryCache = memoryCache_arg;
        //写死ElasticSearch地址
        List<Uri> uris = new List<Uri>();
        uris.Add(new Uri("http://localhost:9200/"));
        //配置Es请求连接池
        var connectionPool = new StaticConnectionPool(uris);
        //json查询的初始化
        this.ElasticJsonClient = new ElasticLowLevelClient();
        //linq查询的初始化
        this.ElasticLinqClient = new ElasticClient();
    }
}如果要根据配置文件读取es地址,以及配置密码等可以这样写:
/// <summary>
/// 根据配置文件读取es地址,以及配置密码
/// </summary>
/// <param name="configuration"></param>
/// <param name="memoryCache_arg"></param>
public ElasticSearchServer(IConfiguration configuration, IMemoryCache memoryCache_arg)
{
    memoryCache = memoryCache_arg;
    //es的地址,支持连接池设置。(建议配置在appsettings.json中进行读取)
    var uris = configuration["ElasticSearchContext:Url"].Split(new string[] { "," }, 
    StringSplitOptions.RemoveEmptyEntries).ToList().ConvertAll(x => new Uri(x));
    //配置Es请求连接池
    var connectionPool = new StaticConnectionPool(uris);
    var settings = new ConnectionSettings(connectionPool)
        .BasicAuthentication("aj", "123456")             //验证账号密码登录
        .RequestTimeout(TimeSpan.FromSeconds(30));           //延迟 30s
    //json查询的初始化
    this.ElasticJsonClient = new ElasticLowLevelClient(settings);
    //linq查询的初始化
    this.ElasticLinqClient = new ElasticClient(settings);
}
三:使用创建的类访问Elasticsearch
我们先要在ElasticSearch里边添加一条数据,可以被查询到,例如这样:


把实体类创建一下:
public class Persons
{
    public string user { get; set; }
    public string message { get; set; }
    public DateTime post_date { get; set; }
    public List<string> albums { get; set; }
}然后使用core代码来查询
1:基于Linq的查询
/// <summary>
/// 基于Linq的查询
/// </summary>
/// <param name="elasticSearchServer"></param>
/// <returns></returns>
public async Task<List<Persons>> ElasticByLinq([FromServices] IElasticSearchServer elasticSearchServer)
{
    var list = await elasticSearchServer.ElasticLinqClient.SearchAsync<Persons>(
                        p => p.Index("users")
                            .Query(op => op.Match(
                                    ss => ss.Field(
                                        qq => qq.user == "Jack"))));
    return list.Documents.ToList();
}

2:基于Json的查询
/// <summary>
/// 基于Json的查询
/// </summary>
/// <param name="elasticSearchServer"></param>
/// <returns></returns>
public async Task<string> ElasticByJson([FromServices] IElasticSearchServer elasticSearchServer)
{
    var jsonobject = new { query = new { match = new { user = "Jack" } } };
    string json = JsonConvert.SerializeObject(jsonobject);
    var stringResponse = await elasticSearchServer.ElasticJsonClient.SearchAsync<StringResponse>("users", json);
    return stringResponse.Body;
}
注意ElasticSearch在7.x版本删除了Type类型,所以你的操作给不了Type了
项目下载:https://download.tnblog.net/resource/index/2e86676437094675a3dc743049fe2c74
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价