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

