什么是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 到 kibana
的bin
文件夹下 执行 nssm install kibana
Elasticsearch 装完后可以打开 kibana 进行创建节点及测试使用了。
部署完es的地址后。可以进行 .Net Core的部署了
.Net Core部署使用 (注册为服务的方法)
(如果对于注册服务不熟悉,可以参考:https://blog.youkuaiyun.com/weixin_43925876/article/details/89070667)
1.安装NuGet包 NEST
Es的查询开放了 lmbda 和 Json 2种查询方式的 Client,
如果需要使用Json Client 操作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 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));
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.youkuaiyun.com/qq_38762313/article/details/90290284