Elasticsearch(ES)的简单使用 for .Net/Windows

 

简介

ElasticsearchES 是一个极其强大,支持海量数据的搜索引擎。 关于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 有可视化的工具navcatredis有可视化工具 redisManegerES当然也有他自己的可视化工具 elasticsearch-head

 elasticsearch-head是一个ES客户端工具即可通过Restful APIElasticsearch进行操作,但也有一些客户端工具提供对于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的进程IDkill掉,然后再次启动。

 

 

使用命令行 netstat -aon|findstr "9200" 查找9200端口的进程ID

找到es的进程ID22924(下面几个是子进程)

使用命令行 :taskkill /f /t /im “22924”  杀死ES的进程

 

 

 

 

杀死进程之后,再次启动ES,刷新浏览器,就可以看到连接成功了(黄了或者红了或者绿)

 

 

 

 

 

.netESElasticsearch.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的查询语句

 

-----------------------未完待续------------------------------------

posted @ 2020-11-09 20:41  小小爵  阅读(1260)  评论(0编辑  收藏  举报