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的查詢語句

 

-----------------------未完待續------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM