没错,你离分布式搜索只差一个Elasticsearch入门!
來(lái)源 | 沉默王二
責(zé)編 | Carol
封圖 |?CSDN 付費(fèi)下載自視覺(jué)中國(guó)
學(xué)習(xí)真的是一件令人開(kāi)心的事情,上次分享了Redis 入門的文章后,收到了很多小伙伴的鼓勵(lì),比如說(shuō):“哎呀,不錯(cuò)呀,通俗易懂,十分鐘真的入門了”。瞅瞅,瞅瞅,我決定再接再厲,入門一下 Elasticsearch,因?yàn)槲覀児镜纳坛窍到y(tǒng)升級(jí)了,需要用 Elasticsearch 做商品的搜索。
不過(guò),我首先要聲明一點(diǎn),我對(duì) Elasticsearch 并沒(méi)有進(jìn)行很深入的研究,僅僅是因?yàn)橐?#xff0c;就學(xué)一下。但作為一名負(fù)責(zé)任的技術(shù)博主,我是用心的,為此還特意在某某時(shí)間上買了一門視頻課程,作者叫阮一鳴。說(shuō)實(shí)話,他光禿禿的頭頂讓我對(duì)這門課程產(chǎn)生了濃厚的興趣。
Elasticsearch 是什么
Elasticsearch 是一個(gè)分布式、RESTful 風(fēng)格的搜索和數(shù)據(jù)分析引擎,能夠解決不斷涌現(xiàn)出的各種用例。作為 Elastic Stack 的核心,它集中存儲(chǔ)您的數(shù)據(jù),幫助您發(fā)現(xiàn)意料之中以及意料之外的情況。
以上引用來(lái)自于官方,不得不說(shuō),解釋得蠻文藝的。意料之中和意料之外,這兩個(gè)詞讓我想起來(lái)了某一年的高考作文題(情理之中和意料之外)。
Elastic Stack 又是什么呢?整個(gè)架構(gòu)圖如下圖(來(lái)源于網(wǎng)絡(luò),侵刪)所示。
信息量比較多,對(duì)吧?那就記住一句話吧,Elasticsearch 是 Elastic Stack 的核心。
國(guó)內(nèi)外的很多知名公司都在用 Elasticsearch,比如說(shuō)滴滴、骨骼、微軟等等。Elasticsearch 有很多強(qiáng)大的功能,比如說(shuō)全文搜索、購(gòu)物推薦、附近定位推薦等等。
理論方面的內(nèi)容就不說(shuō)太多了,我怕小伙伴們會(huì)感到枯燥。畢竟入門嘛,實(shí)戰(zhàn)才重要。
安裝 Elasticsearch
Elasticsearch 是由 Java 開(kāi)發(fā)的,所以早期的版本需要先在電腦上安裝 JDK 進(jìn)行支持。后來(lái)的版本中內(nèi)置了 Java 環(huán)境,所以直接下載就行了。Elasticsearch 針對(duì)不同的操作系統(tǒng)有不同的安裝包,我們這篇入門的文章就以 Windows 為例吧。
下載地址如下:
https://www.elastic.co/cn/downloads/elasticsearch
最新的版本是 7.6.2,280M 左右。但我硬生生花了 10 分鐘的時(shí)間才下載完畢,不知道是不是連通的 200M 帶寬不給力,還是官網(wǎng)本身下載的速度就慢,反正我去洗了 6 顆葡萄吃完后還沒(méi)下載完。
Elasticsearch 是免安裝的,只需要把 zip 包解壓就可以了。
1)bin 目錄下是一些腳本文件,包括 Elasticsearch 的啟動(dòng)執(zhí)行文件。
2)config 目錄下是一些配置文件。
3)jdk 目錄下是內(nèi)置的 Java 運(yùn)行環(huán)境。
4)lib 目錄下是一些 Java 類庫(kù)文件。
5)logs 目錄下會(huì)生成一些日志文件。
6)modules 目錄下是一些 Elasticsearch 的模塊。
7)plugins 目錄下可以放一些 Elasticsearch 的插件。
直接雙擊 bin 目錄下的 elasticsearch.bat 文件就可以啟動(dòng) Elasticsearch 服務(wù)了。
輸出的日志信息有點(diǎn)多,不用細(xì)看,注意看到有“started”的字樣就表明啟動(dòng)成功了。為了進(jìn)一步確認(rèn) Elasticsearch 有沒(méi)有啟動(dòng)成功,可以在瀏覽器的地址欄里輸入?http://localhost:9200?進(jìn)行查看(9200 是 Elasticsearch 的默認(rèn)端口號(hào))。
你看,為了 Search。
那如何停止服務(wù)呢?可以直接按下?Ctrl+C?組合鍵——粗暴、壁咚。
安裝 Kibana
通過(guò) Kibana,我們可以對(duì) Elasticsearch 服務(wù)進(jìn)行可視化操作,就像在 Linux 操作系統(tǒng)下安裝一個(gè)圖形化界面一樣。
下載地址如下:
https://www.elastic.co/cn/downloads/kibana
最新的版本是 7.6.2,284M 左右,體積和 Elasticsearch 差不多。選擇下載 Windows 版,zip 格式的,完成后直接解壓就行了。下載的過(guò)程中又去洗了 6 顆葡萄吃,狗頭。
包目錄不再一一解釋了,進(jìn)入 bin 目錄下,雙擊運(yùn)行 kibana.bat 文件,啟動(dòng) Kibana 服務(wù)。整個(gè)過(guò)程比 Elasticsearch 要慢一些,當(dāng)看到?[Kibana][http] http server running?的信息后,說(shuō)明服務(wù)啟動(dòng)成功了。
在瀏覽器地址欄輸入?http://localhost:5601?查看 Kibana 的圖形化界面。
由于當(dāng)前的 Elasticsearch 服務(wù)端中還沒(méi)有任何數(shù)據(jù),所以我們可以選擇「Try Our Sample Data」導(dǎo)入 Kibana 提供的模擬數(shù)據(jù)體驗(yàn)一下。下圖是導(dǎo)入電商數(shù)據(jù)庫(kù)的看板頁(yè)面,是不是很豐富?
打開(kāi) Dev Tools 面板,可以看到一個(gè)簡(jiǎn)單的 DSL 查詢語(yǔ)句(一種完全基于 JSON 的特定于領(lǐng)域的語(yǔ)言),點(diǎn)擊「運(yùn)行」按鈕后就可以看到 JSON 格式的數(shù)據(jù)了。
Elasticsearch 的關(guān)鍵概念
在進(jìn)行下一步之前,需要先來(lái)理解 Elasticsearch 中的幾個(gè)關(guān)鍵概念,比如說(shuō)什么是索引,什么是類型,什么是文檔等等。Elasticsearch 既然是一個(gè)數(shù)據(jù)引擎,它里面的一些概念就和 MySQL 有一定的關(guān)系。
看完上面這幅圖(來(lái)源于網(wǎng)絡(luò),侵刪),是不是瞬間就清晰了。向 Elasticsearch 中存儲(chǔ)數(shù)據(jù),其實(shí)就是向 Elasticsearch 中的 index 下面的 type 中存儲(chǔ) JSON 類型的數(shù)據(jù)。
在 Java 中使用 Elasticsearch
有些小伙伴可能會(huì)問(wèn),“二哥,我是一名 Java 程序員,我該如何在 Java 中使用 Elasticsearch 呢?”這個(gè)問(wèn)題問(wèn)得好,這就來(lái),這就來(lái)。
Elasticsearch 既然內(nèi)置了 Java 運(yùn)行環(huán)境,自然就提供了一系列 API 供我們操作。
第一步,在項(xiàng)目中添加 Elasticsearch 客戶端依賴:
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version> </dependency>第二步,新建測(cè)試類 ElasticsearchTest:
public?class?ElasticsearchTest?{public?static?void?main(String[]?args)?throws?IOException?{RestHighLevelClient?client?=?new?RestHighLevelClient(RestClient.builder(new?HttpHost("localhost",?9200,?"http")));IndexRequest?indexRequest?=?new?IndexRequest("writer").id("1").source("name",?"沉默王二","age",?18,"memo",?"一枚有趣的程序員");IndexResponse?indexResponse?=?client.index(indexRequest,?RequestOptions.DEFAULT);GetRequest?getRequest?=?new?GetRequest("writer",?"1");GetResponse?getResponse?=?client.get(getRequest,?RequestOptions.DEFAULT);String?sourceAsString?=?getResponse.getSourceAsString();System.out.println(sourceAsString);client.close();} }1)RestHighLevelClient 為 Elasticsearch 提供的 REST 客戶端,可以通過(guò) HTTP 的形式連接到 Elasticsearch 服務(wù)器,參數(shù)為主機(jī)名和端口號(hào)。
有了 RestHighLevelClient 客戶端,我們就可以向 Elasticsearch 服務(wù)器端發(fā)送請(qǐng)求并獲取響應(yīng)。
2)IndexRequest 用于向 Elasticsearch 服務(wù)器端添加一個(gè)索引,參數(shù)為索引關(guān)鍵字,比如說(shuō)“writer”,還可以指定 id。通過(guò) source 的方式可以向當(dāng)前索引中添加文檔數(shù)據(jù)源(鍵值對(duì)的形式)。
有了 IndexRequest 對(duì)象后,可以調(diào)用客戶端的?index()?方法向 Elasticsearch 服務(wù)器添加索引。
3)GetRequest 用于向 Elasticsearch 服務(wù)器端發(fā)送一個(gè) get 請(qǐng)求,參數(shù)為索引關(guān)鍵字,以及 id。
有了 GetRequest 對(duì)象后,可以調(diào)用客戶端的?get()?方法向 Elasticsearch 服務(wù)器獲取索引。getSourceAsString()?用于從響應(yīng)中獲取文檔數(shù)據(jù)源(JSON 字符串的形式)。
好了,來(lái)看一下程序的輸出結(jié)果:
{"name":"沉默王二","age":18,"memo":"一枚有趣的程序員"}完全符合我們的預(yù)期,perfect!
也可以通過(guò) Kibana 的 Dev Tools 面板查看“writer”索引,結(jié)果如下圖所示。
好了,我親愛(ài)的小伙伴們,以上就是本文的全部?jī)?nèi)容了,是不是看完后很想實(shí)操一把 Elasticsearch,趕快行動(dòng)吧!如果你在學(xué)習(xí)的過(guò)程中遇到了問(wèn)題,歡迎隨時(shí)和我交流,雖然我也是個(gè)菜鳥(niǎo),但我有熱情啊。
另外,如果小伙伴想寫(xiě)入門級(jí)別的文章,這篇就是最好的范例。
推薦閱讀實(shí)操來(lái)了!一文告訴你如何用 Streamlit 和 Heroku 開(kāi)發(fā) Web
避坑!使用 Kubernetes 最易犯的 10 個(gè)錯(cuò)誤
雷軍:4G 手機(jī)已清倉(cāng),全力轉(zhuǎn) 5G;QQ音樂(lè)播放中途插語(yǔ)音廣告引熱議;Wine 5.9 發(fā)布 | 極客頭條
15 歲黑進(jìn)系統(tǒng),發(fā)挑釁郵件意外獲 Offer,不惑之年捐出全部財(cái)產(chǎn),Twitter CEO 太牛了!
必讀!53個(gè)Python經(jīng)典面試題詳解
贈(zèng)書(shū) | 1月以來(lái) Tether 增發(fā)47億 USDT,美元都去哪兒了?
真香,朕在看了!
總結(jié)
以上是生活随笔為你收集整理的没错,你离分布式搜索只差一个Elasticsearch入门!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 云计算管理工具:根植热土
- 下一篇: 重磅 | 边缘计算核心技术辨析