這里關(guān)于es的下載和啟動(dòng)就不多說(shuō)了,不會(huì)的可以去看我一篇專門講下載啟動(dòng)的文章:
http://www.reibang.com/p/a5bf043eec62
然后這里有個(gè)注意點(diǎn):es啟動(dòng)會(huì)默認(rèn)占用2G的內(nèi)存挎峦。如果沒(méi)這么多空間可以在啟動(dòng)的時(shí)候指定大小蕾羊。
es有兩個(gè)默認(rèn)端口9200就缆,9300
- 9200用于外部通訊制跟,基于http協(xié)議竭贩,程序與es的通信使用9200端口旧困。
- 9300jar之間就是通過(guò)tcp協(xié)議通信印屁,遵循tcp協(xié)議循捺,es集群中的節(jié)點(diǎn)之間也通過(guò)9300端口進(jìn)行通信。
然后es的官方文檔的話我不知道為啥es官網(wǎng)總是轉(zhuǎn)啊轉(zhuǎn)啊的打不開(kāi)雄人,所以這里依然是群文件中下載的中文版權(quán)威指南从橘,感興趣的私我我發(fā)你:
這里簡(jiǎn)單的介紹下es中的概念類比mysql:
然后我們參考es手冊(cè)來(lái)簡(jiǎn)單的測(cè)試下es的添加操作。因?yàn)檫@個(gè)傳參是json串础钠,所以這里用postman來(lái)測(cè)試恰力。如下:
ES中添加操作:
下面我們按照這個(gè)要求自己來(lái)在postman操作:
最后的返回說(shuō)了已經(jīng)created了,就是說(shuō)明創(chuàng)建成功了的旗吁。同樣我們可以多插入幾個(gè)好執(zhí)行別的操作踩萎。至于json串我們?nèi)ナ謨?cè)上找就行了。
ES中查詢操作:
剛剛我又手動(dòng)添加了幾條文檔很钓,然后接下來(lái)我們查詢:
es支持restful接口香府,所以我們換成get方式請(qǐng)求:
這里id是文檔id,found:true說(shuō)明查詢到了码倦。source中的查詢到的內(nèi)容企孩。
ES刪除操作:
注意,只要把請(qǐng)求方式換成del就會(huì)刪除:
再次整理下這個(gè)接口:
- put是添加和修改(傳的id存在的情況下是修改)叹洲。
- del是刪除柠硕。
- get是查詢工禾。
需要注意的是一個(gè)文檔修改以后运提,version會(huì)增加蝗柔。
然后es中g(shù)et xx/xx/_search是查詢?cè)擃愋偷乃形臋n。
ES檢索
上面簡(jiǎn)單的查詢指定id的民泵,還有全查詢不說(shuō)癣丧,es中一些檢索功能是很強(qiáng)大的,畢竟一般提起es第一反應(yīng)就是搜索引擎栈妆。
話不說(shuō)多胁编,es中允許篩選條件是json字符串。
這個(gè)其實(shí)手冊(cè)上說(shuō)的挺全的鳞尔,我就不一一搬運(yùn)了嬉橙,簡(jiǎn)單來(lái)說(shuō)我個(gè)人總結(jié)就是有兩個(gè)強(qiáng)大的功能:分詞,權(quán)重寥假。
我們可以在全文檢索的時(shí)候指定一些關(guān)鍵字:比如A,B,C,D
四個(gè)關(guān)鍵字都包含的權(quán)重最高市框,排在結(jié)果集的上面。只有三個(gè)的次之糕韧,排在四個(gè)都有的下面枫振。只有兩個(gè)的更低,只有一個(gè)的排在最后萤彩。這個(gè)權(quán)重是es實(shí)現(xiàn)的粪滤。
其實(shí)上面說(shuō)的挺少的,還有很多東西雀扶,比如高亮檢索杖小,短語(yǔ)檢索等。我這里簡(jiǎn)單說(shuō)一下高亮愚墓,畢竟是挺神奇的東西:
雖然說(shuō)百度不是用es實(shí)現(xiàn)的窍侧,但是這個(gè)高亮效果就是這樣,看到?jīng)]转绷?搜索的關(guān)鍵字就紅了伟件!這個(gè)我反正是覺(jué)得挺神奇的。
SpringBoot整合ES
上面說(shuō)了很多都是es本身的東西议经,但是作為一個(gè)java程序員斧账,最終還是要實(shí)現(xiàn)springBoot整合es的。SpringBoot支持兩種技術(shù)和es交互煞肾。一種的jest咧织,還有一種就是SpringData-ElasticSearch。
其根據(jù)引入的依賴不同而選擇不同的技術(shù)籍救。反正作為spring全家桶目前是以springdata為主流使用技術(shù)习绢。直接說(shuō)data-elasticsearch了
- 導(dǎo)包
第一步引入依賴沒(méi)啥好說(shuō)的。老規(guī)矩,去maven倉(cāng)庫(kù)里找:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
注意這里要引入springBoot整合es的場(chǎng)景啟動(dòng)器闪萄∥嗳矗可以簡(jiǎn)單看下這個(gè)場(chǎng)景啟動(dòng)器里面都有啥依賴:
-
分析自動(dòng)配置了什么
這里又到了源碼時(shí)間啦,依然是老規(guī)矩败去,去配置文件中找(既然使用的是data-elasticsearch放航,肯定要去data包下找,注意源碼位置):
我們呀
其實(shí)es中需要配置的參數(shù)還挺少的圆裕。广鳍。除了endpoints剩下就用戶名密碼了。這里簡(jiǎn)單的看一下吓妆,前綴是spring.elasticsearch.rest.XXX赊时。 -
repository層
這個(gè)類似于jpa的用法,也是需要自己寫對(duì)應(yīng)的dao層的行拢。type類型在java中就是一個(gè)類蛋叼。而一個(gè)java實(shí)體對(duì)象是es中的一個(gè)文檔,對(duì)象的屬性對(duì)應(yīng)es中的屬性剂陡。對(duì)應(yīng)關(guān)系是這樣的狈涮。
現(xiàn)在我們要自己寫respository來(lái)操作某個(gè)類型。同樣這個(gè)類型在java中要有對(duì)應(yīng)的實(shí)體鸭栖。如下代碼:
幾乎和jpa大同小異歌馍,重點(diǎn)是實(shí)體上這個(gè)注解藥指定索引和類型。
下面簡(jiǎn)單的做一些es的crud操作 - es的curd操作
其實(shí)這個(gè)真的真的真的和jpa好像晕鹊,也自帶了crud方法松却,我直接使用測(cè)試:
事實(shí)證明一個(gè)簡(jiǎn)單的插入操作就完成了。然后我們?cè)倏匆幌聞e的操作:
這里因?yàn)椴樵兪莻€(gè)查詢語(yǔ)句溅话,所以我只判斷這個(gè)id存不存在晓锻。
下面的接口測(cè)試:剛剛我們插入了id是8023的,所以查詢?cè)诓辉谡?lái)講應(yīng)該是在的飞几。然后調(diào)用刪除接口砚哆,再查尋在不在。如果是不在說(shuō)明這兩個(gè)接口都是正常工作的:
結(jié)果和我們預(yù)想的一樣一樣的屑墨,說(shuō)明這兩個(gè)接口都正常使用了躁锁。
到這,es的簡(jiǎn)單curd功能就這樣了卵史。
其實(shí)es可以講的東西有好多战转,但是因?yàn)槲覀冞@里只是簡(jiǎn)單的說(shuō)一下整合,僅僅作用于入門以躯,所以這里就不多說(shuō)了槐秧,畢竟想要吃透es我覺(jué)得是個(gè)很難的事。小小的吐槽一下之前我一直宛若神人的講師雷神,感覺(jué)講進(jìn)階課程以來(lái)也終于不像是框架是他寫的那么熟悉了刁标。當(dāng)然了我沒(méi)別的意思颠通,依然覺(jué)得雷神相當(dāng)厲害,但是術(shù)業(yè)有專攻命雀。有可能真的是接觸的少呢。比如我工作了三年多了斩箫,也就是在demo 中 自己琢磨過(guò)es玩吏砂,一點(diǎn)實(shí)踐經(jīng)驗(yàn)都莫得,賊可惜乘客。
本篇筆記也就記到這里了狐血,越來(lái)越覺(jué)得這個(gè)進(jìn)階課程不是教各種技術(shù)的用法,而是如何整合別的技術(shù)易核,其核心就是自動(dòng)配置匈织。第一看配置屬性類對(duì)應(yīng)配置屬性。第二看自動(dòng)配置類看都配置了什么怎么用牡直。有點(diǎn)失望與真正三方技術(shù)整合的過(guò)于淺顯缀匕。但是其實(shí)按照這個(gè)教學(xué)時(shí)長(zhǎng)也是能理解的事,畢竟這個(gè)課程主要說(shuō)的還是springBoot碰逸。反正就這樣吧乡小,本篇筆記如果幫到你了記得點(diǎn)個(gè)喜歡點(diǎn)個(gè)關(guān)注。另外spring Boot 1.x和2.x大不相同饵史,如果遇到問(wèn)題了歡迎留言或者私信我大家一起討論解決满钟!祝大家工作順順利利!平安夜快樂(lè)!