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

前言
最近我參與了一個(gè)重構(gòu)項(xiàng)目,由于這個(gè)下項(xiàng)目并發(fā)量比較大,而且經(jīng)常出現(xiàn)MQ丟數(shù)據(jù)的問題,所以工單特別多,為了解決這個(gè)歷史遺留問題,我們開啟了為期兩個(gè)月的重構(gòu)之旅。
目前,這個(gè)項(xiàng)目剛剛啟動(dòng),現(xiàn)在的核心架構(gòu),主要依托于redis,總的來說就是,所有的數(shù)據(jù)交互均依托于redis,不管是新增、查詢、更新、刪除等,都在redis上操作,然后通過一個(gè)DAL組件完成數(shù)據(jù)庫數(shù)據(jù)同步。就是這樣的架構(gòu),讓我們在開發(fā)的時(shí)候簡直要抓狂了,為了一個(gè)在數(shù)據(jù)庫層面帶索引的查詢,我們需要從redis中拿出所有數(shù)據(jù),然后從list中拿出我們需要的數(shù)據(jù),感覺操作太復(fù)雜了,但是沒辦法呀,架構(gòu)師就是這么定的。
因?yàn)楹笃谝?code style="overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">redis換成ES,所以我就提前把相關(guān)內(nèi)容學(xué)起來,以備不時(shí)之需。
elasticsearch
簡介
elasticsearch是什么?根據(jù)它的字面意思,我們知道它和搜索有關(guān),官方給出的解釋是:
Elasticsearch是一個(gè)分布式的免費(fèi)開源搜索和分析引擎,適用于包括文本、數(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風(fēng)格API、分布式特性、速度和可擴(kuò)展性而聞名,是Elastic Stack的核心組件;Elastic Stack是一套適用于數(shù)據(jù)采集、擴(kuò)充、存儲(chǔ)、分析和可視化的免費(fèi)開源工具。人們通常將Elastic Stack稱為ELK Stack(代指Elasticsearch、Logstash和Kibana),目前Elastic Stack包括一系列豐富的輕量型數(shù)據(jù)采集代理,這些代理統(tǒng)稱為Beats,可用來向Elasticsearch發(fā)送數(shù)據(jù)。

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

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

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

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

訪問
127.0.0.1:9200,如果返回值結(jié)果如上,則表明elasticsearch啟動(dòng)成功。
測試
安裝啟動(dòng)完成后,127.0.0.1:9200訪問也ok,說明es已經(jīng)部署ok,下面我們對它進(jìn)行一些簡單測試。
在前面的簡介中,我們知道es對外提供了 REST 風(fēng)格 API,所以我們下面的測試都是基于REST接口進(jìn)行的,為了方便我們后面就直接用curl工具( 或者你也可以用postman)進(jìn)行操作了。
REST
下面是rest協(xié)議的幾種常用請求類別以及他們表示的含義,我們對es的操作也就是基于他們進(jìn)行的:
PUT請求:表示更新POST請求:表示寫DELETE請求:表示刪除GET請求:表示查詢HEAD請求:與GET類似,但是不返回消息體OPTIONS請求:獲取服務(wù)器支持的HTTP請求方法TRACE請求:用來調(diào)試web服務(wù)器連接的HTTP方式CONNECT請求:把服務(wù)器作為跳板,讓服務(wù)器代替用戶去訪問其它網(wǎng)頁,之后把數(shù)據(jù)原原本本的返回給用戶
關(guān)于Rest協(xié)議我們暫時(shí)先說這么多,明天我們再詳細(xì)說明。
以上這些請求中,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ù)庫中的庫,一個(gè)索引就對應(yīng)一個(gè)數(shù)據(jù)庫。
總結(jié)
今天我們主要分享了es的下載、安裝和測試,整體內(nèi)容很簡單,也不需要任何復(fù)雜的配置,只要確保es可以在本地正常啟動(dòng)即可。好了,es的簡單入門我們今天就先到這里,我們從明天開始學(xué)習(xí)es的其他基本術(shù)語和用法。
