.NET core 中 ElasticSearch 的部署及使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43925876/article/details/96108847

      什么是ElasticSearch ?
      Elasticsearch是一个实时的分布式搜索和分析引擎。是目前行业中非常热门的一个技术。Elasticsearch是一种分布式的海量数据搜索与分析的技术,可以用于电商网站、门户网站、企业IT系统等各种场景下的搜索引擎,也可以用于对海量的数据进行近实时的数据分析,模糊搜索的性能极高。     

      Elasticsearch 的语法学习链接:https://www.e-learn.cn/content/qita/831808


  ElasticSearch的部署

  1.ElasticSearch 首先需要java的环境变量: 

 地址:  https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
 

   2.配置环境变量 

  右键我的电脑->属性->高级系统设置->环境变量


创建一个java_home的环境变量。指向刚安装的java的环境

3.下载ElasticSeach

       下载链接: https://www.elastic.co/cn/downloads/past-releases   
 

  自行选择一个版本的 ElasticSeach 进行下载

 

   下载完后在bin 目录下进行启动 => 
   打开cmd窗口(打开方式  按住Shift 键,然后鼠标右击,打开如下图窗口)

再打开的窗口输入 .\elasticsearch    回车进行启动

,启动完后浏览器访问 localhost:9200,展示elasticsearch的信息


  在这里扩展,可以将elasticsearch 注册成一个服务 这样可以便捷进行启动的操作。
  再ES文件夹的Bin目录下。打开cmd(同上方启动es的方法一致)输入 .\elasticsearch-service install 然后等待安装

 

 然后就可以在服务中进行启动了。
 

4.安装Kibana (elasticsearch的可视化工具,类似于navicate)

    下载链接:https://www.elastic.co/cn/downloads/past-releases

注意下载的Kibana 必须和你之前下载的 elasticsearch 版本一致。
下载完成后。将压缩包解压。和elasticsearch的文件夹放在一起,然后打开bin目录 cmd 和启动elasticsearch一样。
输入 .\kibana.bat    操作完后。浏览器打开 localhost:5601 就可以访问kibana了


    将 Kibana 注册成服务
1)下载NSSM, 下载地址:http://www.nssm.cc/download

2)   将NSSM解压并将nssm.exe拷贝到kibana的bin\目录下 
3)打开cmd 这里之前 Shift + 右键的方式不可以。必须使用cmd 到 kibanabin文件夹下  执行 nssm install kibana


Elasticsearch 装完后可以打开 kibana 进行创建节点及测试使用了。

 

部署完es的地址后。可以进行 .Net Core的部署了

.Net Core部署使用 (注册为服务的方法)

(如果对于注册服务不熟悉,可以参考:https://blog.csdn.net/weixin_43925876/article/details/89070667)


1.安装NuGet包  NEST

Es的查询开放了  lmbda 和 Json 2种查询方式的 Client,如果在后续的应用中,还想要通过Json的方式操作es,需要再引用一个 Newtonsoft.Json 包

2. 创建服务

服务接口基类:

   public interface IElasticSearchServer
   {
        /// <summary>
        /// Linq查询的官方Client
        /// </summary>
        IElasticClient ElasticLinqClient { get; set; }
       
        /// <summary>
        /// Js查询的官方Client
        /// </summary>
        IElasticLowLevelClient ElasticJsonClient { get; set; }
    }

服务实现类(这里没写具体的方法内容):

   public class ElasticSearchServer : IElasticSearchServer
    {
        /// <summary>
        /// Linq查询的官方Client
        /// </summary>
        public IElasticClient ElasticLinqClient { get; set; }
        /// <summary>
        /// Js查询的官方Client
        /// </summary>
        public IElasticLowLevelClient ElasticJsonClient { get; set; }

        public IMemoryCache memoryCache { get; set; }


        public ESSever(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));
            var connectionPool = new StaticConnectionPool(uris);     //配置Es请求连接池
            var settings = new ConnectionSettings(connectionPool)
                .BasicAuthentication("叶大白", "123456")             //验证账号密码登录
                .RequestTimeout(TimeSpan.FromSeconds(30));           //延迟 30s
            //json查询的初始化
            this.ElasticJsonClient = new ElasticLowLevelClient(settings);  
            //linq查询的初始化
            this.ElasticLinqClient = new ElasticClient(settings);
        }
     }

将服务注册进Startup.cs 的 ConfigureServices 管道:

       public void ConfigureServices(IServiceCollection services)
        {
            services.AddMemoryCache();//添加本系统的内存机制 
            services.AddLogging();
            //配置跨域
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAnyOrigin",policy =>policy.SetIsOriginAllowed((host) => true)
                                                                  .AllowAnyHeader()
                                                                  .AllowAnyMethod()
                                                                  .AllowCredentials());
            });
            services.AddDbContextPool<EFModel.fp_icmContext>(
                 options => options.UseMySQL(DAL.ConnectionStr.ICM)
             , 500);
            services.AddHttpClient();

 
            services =SeverRoot.AddSever(services); //微服务的注册
              
        }
   public static class SeverRoot
    {
        /// <summary>
        /// 微服务注册
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static IServiceCollection AddSever(IServiceCollection services)
        {
            services.AddSingleton<IElasticSearchServer, ElasticSearchServer>();
            return services;
        }
    }

这里我将所有的服务注入单独写成一个类。然后返回回来。 避免过多服务铺开在Startup.cs 不美观。

3.具体操作实现  (本文只提供了一些Json/Linq  Client提供的增删改查的方法。具体使用请自行封装,并且这些方法都是异步)

  这里只提供JSON的查询方式(将下列需要使用的方法写入到服务实现类中,可以直接使用,也可以进行二次封装):

  //JSON的检测索引
  ElasticJsonClient.IndicesExistsAsync<StringResponse>();

  //JSON的创建节点方法
  ElasticJsonClient.IndicesCreateAsync<StringResponse>();

  //JSON的删除节点方法
  ElasticJsonClient.IndicesDeleteAsync<StringResponse>();
  
  //JSON的增加
  ElasticJsonClient.IndexAsync<StringResponse>();

  //JSON的批量增加
  ElasticJsonClient.BulkAsync<StringResponse>();

  //JSON的删除方法
  ElasticJsonClient.IndicesDeleteAsync<StringResponse>();  

  //JSON的修改方法
  ElasticJsonClient.BulkAsync<StringResponse>();

  //JSON的批量修改方法
  ElasticJsonClient.BulkAsync<StringResponse>();  

  //JSON的查询方法  
  ElasticJsonClient.SearchAsync<StringResponse>();

 使用json的方式进行查询可以使用匿名方法的方式然后转json 进行查询:

  var object = new { HellorWord = "你好", Test = new { Name = "今天测试" + i.ToString(), Sex = "男" } };
  var jsonResult=JsonConvert.SerializeObject(object);

4.返回值得截取。

 Es的返回值可以在。body中进行截取来进行封装这里没有具体的实现。只提供思路
 返回值是StringResponse类型。 推荐使用JObject进行转换。(使用方式类似于datatable)
 进行对返回值的判断。例如:

  var resObj = JObject.Parse(stringRespones.Body);
  if (!(bool)resObj["errors"])
  {
      return true;
  }

 

  本文参考文章:  https://blog.csdn.net/qq_38762313/article/details/90290284

展开阅读全文

没有更多推荐了,返回首页