Elasticsearch(ES)的简单使用 for .Net/Windows
简介
Elasticsearch(ES) 是一个极其强大,支持海量数据的搜索引擎。 关于ES的应用场景和前世今生有一些很棒的文章都,讲述的很清楚。可以参考,本文主要讲简单的入手使用。
https://www.jianshu.com/p/8494ae9a53a7
https://www.cnblogs.com/cdchencw/p/12449500.html
下载和安装
安装包下载
https://mirrors.huaweicloud.com/elasticsearch/6.8.0/elasticsearch-6.8.0.msi
下载完之后是一个window安装包,开始安装
第一步选择安装目录,默认是在c盘。我一般会修改一下安装目录。
手动新建好这几个文件夹,分别存放es的配置文件,es的数据,es的日志文件
点击“NEXT”进入下一步
选择是否安装为服务,账户信息等几个选项。不用做修改。
点击“NEXT”进入下一步
设置集群名,节点名 ,端口号,使用内存限制等等。不用做修改默认内存是两个G。不用改,后面有需要改动时可以到配置文件再去修改。
点击 “NEXT”进入下一步
这里是一些组件的安装,暂时没有要用的,直接跳过
继续“NEXT”进入下一步
点击 “INSTALL”开始安装
安装中
安装成功后可以看到多了几个文件
进入到6.8.0
双击elasticsearch.exe 启动es服务。(有的版本是elasticsearch.bat)。
双击后会闪一下,一般就已经启动了。在浏览器 输入 http://localhost:9200/ 如果看到下面这个样子就代表启动成功了。
-------------END-------------
可视化工具
Mysql 有可视化的工具navcat,redis有可视化工具 redisManeger,ES当然也有他自己的可视化工具 elasticsearch-head。
elasticsearch-head是一个ES客户端工具即可通过Restful API对Elasticsearch进行操作,但也有一些客户端工具提供对于ElasticSearch更加友好的可视化操作支持,比如elasticsearch-head。
下载和安装
下载地址 https://codeload.github.com/mobz/elasticsearch-head/zip/master
完成下载后解压文件,然后复制整个文件到es的安装目录下,随便哪儿都行,方便好找就可以。
elasticsearch-head 插件是一个node工程,所以提前需要安装好node环境和npm才能安装插件Node安装和npm安装方法这里不在复述。
步骤1 :安装 grunt-cli
使用cmd命令npm install -g grunt-cli全局安装
步骤2 :使用命令行进入到刚才复制过来的文件夹elasticsearch-head-master目录下,使用命令行npm install 进行安装
安装完成后在浏览器输入 http://localhost:9100/
如果能看着这个样子代表安装成功了
但是!如果看到有个“健康集群状态:未连接”,这说明可视化工具还没有连上ES服务
解决办法:
找到es的配置文件elasticsearch.yml,在最下面加入这么几行
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
(是不是很眼熟,和后端配置跨域一样,其实就是跨域访问一个是9200端口,一个是9300端口)
修改完成后,保存存并刷新浏览器,然后你会发现依然没有连上,这是因为配置文件启动时已近被加载了,需要重启es才能读取改动后的配置。
一些es安装时是以服务的形式安装的,只关掉启动es的黑窗并不能关闭ES。而es好像也并没有提供重启或者关闭的入口。这里有一个更直接的方法:通过命令行找到es的进程ID,kill掉,然后再次启动。
使用命令行 :netstat -aon|findstr "9200" 查找9200端口的进程ID
找到es的进程ID是22924(下面几个是子进程)
使用命令行 :taskkill /f /t /im “22924” 杀死ES的进程
杀死进程之后,再次启动ES,刷新浏览器,就可以看到连接成功了(黄了或者红了或者绿)
.net库 ESElasticsearch.Net
Elasticsearch.Net是.Net下面最常用es操作库
打开nuget搜索“Elasticsearch.Net”
选择和es相同的版本 6.8.0 安装
注意:Elasticsearch.Net的版本和es的版本号是相对应的,如果Elasticsearch.Net的版本高于高于es的版本号。会有连接失败的问题
添加一条数据的操作
var settings = new ConnectionSettings(node).DefaultIndex("student");
代码
namespace ES_DEMO { class student { public string Id { get; set; } public int age { get; set; } public string name { get; set; } public List<String> likes { get; set; } } class Program { static ElasticClient client; static void Main(string [] args) { var node = new Uri("http://localhost:9200"); var settings = new ConnectionSettings(node).DefaultIndex("student"); // var settings = new ConnectionSettings(pool).DefaultIndex("crm.base.log").BasicAuthentication("elastic", "caKBawShu0Pm7BsjSFbd"); client = new ElasticClient(settings); create(); Console.ReadLine(); } public static void create() { var stu = new student(); stu.Id = "1"; stu.age = 2; stu.name = "jimf"; var log = new CreateRequest<student>(Guid.NewGuid()); log.Document = stu; var r = client.Create<student>(log); } public static void delete() { client.Delete<student>(new DocumentPath<student>("1")); } public static void query() { var stu = client.Get<student>("6cfb5050-d175-4fb1-8f8d-c6d88cb0e2a4"); var tweet = JsonConvert.SerializeObject(stu); var stus = client.Search<student>(s => s .From(0) .Size(10) .Query(q => q.Term(t => t.name, "jim") || q.Match(mq => mq.Field(f => f.age).Query("1")) ) ); } } }
每次连接需要设置一下索引参数,索引名必须是小写,否则会抛出异常
Es中的索引index有点像关系型数据库中的“库”的概念,一个索引区分一个库,而type有点像“表”的概念。
这是添加成功后的返回值
在可视化工具里面查看我们刚才添加的一条数据
打开可视化工具 http://localhost:9100/
键入查询的url http://localhost:9200/student/_search/
使用匹配所有的{"query":{"match_all":{}}} 就能查看到我们添加的结果
ES的查询语句
Es的查询语句较为复杂且用的比较多,和传统的关系型数据库以及比较类似的mongo都不太一样。
今天先写这么多,下期写es的查询语句
-----------------------未完待续------------------------------------