簡介
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的查詢語句
-----------------------未完待續------------------------------------