開始步入Elasticsearch的世界:初探elasticsearch

前言
最近我參與了一個重構(gòu)項目,由于這個下項目并發(fā)量比較大,而且經(jīng)常出現(xiàn)MQ丟數(shù)據(jù)的問題,所以工單特別多,為了解決這個歷史遺留問題,我們開啟了為期兩個月的重構(gòu)之旅。
目前,這個項目剛剛啟動,現(xiàn)在的核心架構(gòu),主要依托于redis,總的來說就是,所有的數(shù)據(jù)交互均依托于redis,不管是新增、查詢、更新、刪除等,都在redis上操作,然后通過一個DAL組件完成數(shù)據(jù)庫數(shù)據(jù)同步。就是這樣的架構(gòu),讓我們在開發(fā)的時候簡直要抓狂了,為了一個在數(shù)據(jù)庫層面帶索引的查詢,我們需要從redis中拿出所有數(shù)據(jù),然后從list中拿出我們需要的數(shù)據(jù),感覺操作太復雜了,但是沒辦法呀,架構(gòu)師就是這么定的。
因為后期要把redis換成ES,所以我就提前把相關(guān)內(nèi)容學起來,以備不時之需。
elasticsearch
簡介
elasticsearch是什么?根據(jù)它的字面意思,我們知道它和搜索有關(guān),官方給出的解釋是:
Elasticsearch是一個分布式的免費開源搜索和分析引擎,適用于包括文本、數(shù)字、地理空間、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)等在內(nèi)的所有類型的數(shù)據(jù)。Elasticsearch在Apache Lucene的基礎(chǔ)上開發(fā)而成,由Elasticsearch N.V.(即現(xiàn)在的 Elastic)于2010年首次發(fā)布。Elasticsearch以其簡單的REST風格API、分布式特性、速度和可擴展性而聞名,是Elastic Stack的核心組件;Elastic Stack是一套適用于數(shù)據(jù)采集、擴充、存儲、分析和可視化的免費開源工具。人們通常將Elastic Stack稱為ELK Stack(代指Elasticsearch、Logstash和Kibana),目前Elastic Stack包括一系列豐富的輕量型數(shù)據(jù)采集代理,這些代理統(tǒng)稱為Beats,可用來向Elasticsearch發(fā)送數(shù)據(jù)。

簡單來說,elasticsearch可以用以下幾個關(guān)鍵字概括:
分布式 開源 搜索和分析引擎
做后端開發(fā)的小伙伴應該都清楚,在我們所有的系統(tǒng)中,基本上都是讀多寫少,所以真正制約一個系統(tǒng)性能是查詢,是搜索,如果有一款組件可以解決數(shù)據(jù)搜索的問題,那系統(tǒng)的性能肯定會得到飛速提升,而elasticsearch就是這樣一款組件。現(xiàn)階段,很多企業(yè)都在用es,目前被提及最多的是攜程,攜程是大規(guī)模在使用,單日索引數(shù)據(jù)條數(shù)600億,這就有點強了。
好了,關(guān)于簡介就先到這里,更多信息各位小伙伴可以自己檢索,下面我們看下如何安裝使用es。
下載
訪問官方網(wǎng)站,選擇對應版本,然后下載。官方地址如下:
https://www.elastic.co/cn/downloads/elasticsearch
這里我直接選擇windows,各位小伙伴根據(jù)自己的操作系統(tǒng)進行選擇。

安裝
下載過程還是很快的,下載完成后直接解壓壓縮文件即可:

下面我們簡單介紹下,elasticsearch的文件結(jié)構(gòu):
bin:存放可執(zhí)行文件,包括腳本等,一般我們用的第三方組件都是這樣的結(jié)構(gòu),比如zk、nacos等config:elasticsearch的配置文件jdk:這個各位小伙伴應該很熟悉,目前elasticsearch-7.14.0下的jdk版本比較高是16.0.1
``lib
:elasticsearch本身應該是基于java開發(fā)的,所以lib就是elasticsearch`要用到的包,其中也包括它自身應用的包logs:存放運行日志,目前是空的modules:這個應該是elasticsearch可以擴展的模塊,默認情況下好多模塊是不啟用的plugins:這個應該是存放第三方擴展組件的,目前該文件夾是空的。
好了,elasticsearch的目錄結(jié)構(gòu)我們暫時就說這么多,下面看下如何啟動elasticsearch。
啟動
啟動elasticsearch也很簡單,只需要執(zhí)行bin文件夾下的腳本即可:
elasticsearch.bat
如果啟動報錯,檢查下本地jdk版本,最好選擇16及以上版本,因為我本地安裝的就是16,所以啟動沒有報錯,但是在控制臺有如下提示:

按照提示信息,elasticsearch的JAVA_HOME需要設置為ES_JAVA_HOME,JAVA_HOME不推薦使用,應該是怕和jdk沖突吧。
從啟動日志我們看出以下幾點:
啟動的時候會加載
modules的文件,具體各個模塊的用途,我們暫時先不研究elasticsearch服務默認情況下會用到9300和9200,其中9300的端口協(xié)議未知,但是肯定不是http協(xié)議,9200是可以直接訪問的:

訪問
127.0.0.1:9200,如果返回值結(jié)果如上,則表明elasticsearch啟動成功。
測試
安裝啟動完成后,127.0.0.1:9200訪問也ok,說明es已經(jīng)部署ok,下面我們對它進行一些簡單測試。
在前面的簡介中,我們知道es對外提供了 REST 風格 API,所以我們下面的測試都是基于REST接口進行的,為了方便我們后面就直接用curl工具( 或者你也可以用postman)進行操作了。
REST
下面是rest協(xié)議的幾種常用請求類別以及他們表示的含義,我們對es的操作也就是基于他們進行的:
PUT請求:表示更新POST請求:表示寫DELETE請求:表示刪除GET請求:表示查詢HEAD請求:與GET類似,但是不返回消息體OPTIONS請求:獲取服務器支持的HTTP請求方法TRACE請求:用來調(diào)試web服務器連接的HTTP方式CONNECT請求:把服務器作為跳板,讓服務器代替用戶去訪問其它網(wǎng)頁,之后把數(shù)據(jù)原原本本的返回給用戶
關(guān)于Rest協(xié)議我們暫時先說這么多,明天我們再詳細說明。
以上這些請求中,es只支持GET, PUT, DELETE, HEAD,其他的是不支持的:

創(chuàng)建索引
curl -X PUT 127.0.0.1:9200/syske
返回結(jié)果:
{
"acknowledged":true,
"shards_acknowledged":true,
"index":"syske"
}
訪問索引
curl -X GET 127.0.0.1:9200/syske
返回結(jié)果:
{
"syske": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "1",
"provided_name": "syske",
"creation_date": "1629869376742",
"number_of_replicas": "1",
"uuid": "cFI0E1VxQrKyxNiH1qZBfA",
"version": {
"created": "7140099"
}
}
}
}
}
刪除索引
curl -X DELETE 127.0.0.1:9200/syske
返回結(jié)果
{
"acknowledged":true
}
說明:索引就類似于我們傳統(tǒng)數(shù)據(jù)庫中的庫,一個索引就對應一個數(shù)據(jù)庫。
總結(jié)
今天我們主要分享了es的下載、安裝和測試,整體內(nèi)容很簡單,也不需要任何復雜的配置,只要確保es可以在本地正常啟動即可。好了,es的簡單入門我們今天就先到這里,我們從明天開始學習es的其他基本術(shù)語和用法。
