學(xué)習(xí)計劃安排如下:
- 學(xué)了幾天的Elasticserch,但都是它本身的知識點,如何通過JAVA語言去操作它呢?
- 這就好比以前學(xué)數(shù)據(jù)庫,在數(shù)據(jù)庫工具中通過sql語句也能實現(xiàn)增刪改查,而在Java中就可以通過jdbc操作數(shù)據(jù)庫。
- 這里不學(xué)原生的Elasticsearch客戶端,而是直接學(xué)習(xí)spring提供的套件:SpringDataElasticsearch。
- 畢竟要知道,我們以前也基本沒用原生的jdbc,而是用的框架,使用起來也簡便。
一、創(chuàng)建Demo工程
關(guān)于SpringDataElasticsearch介紹:

學(xué)Java有一個繞不開的坎就是spring,就是主流的很多功能都會看到spring的影子。
我們已經(jīng)接觸過了的就有:SpringMVC、Spring、SpringBoot、SpringCloud。
今天繼續(xù)接觸Spring Data中的一個模塊。
為了更好地學(xué)習(xí),創(chuàng)建一個demo工程。
通過spring腳手架創(chuàng)建項目

①Spring Initializr
使用idea開發(fā)工具創(chuàng)建Java項目有多種方式,以前就是通過Maven自行創(chuàng)建一個項目。
也可以通過Spring Initializr創(chuàng)建一個項目。
②說明項目名和Java版本號
項目名為es-demo,使用的jdk8.
③指定項目中需要用到的依賴
這里也就是springDataElasticsearch。
下圖也就是創(chuàng)建好后的項目結(jié)構(gòu):

該方式創(chuàng)建的好處在于:
我們不用自己導(dǎo)入依賴了,依賴是在創(chuàng)建項目時指定的,也就是創(chuàng)建項目中的步驟③
同時關(guān)于啟動類、配置文件都幫我們自學(xué)創(chuàng)建好了,其實無外乎就是上述三個核心關(guān)鍵步驟:啟動類、配置文件、pom文件。
該方式創(chuàng)建的壞處在于:
版本問題,項目中可能用的是比較舊的版本,spring創(chuàng)建的版本需要自行修改。
根據(jù)自己的需求選擇創(chuàng)建方式就好。
此外關(guān)于配置文件:

自行配置的是properties文件,而我們常用的是yml文件,這里將其修改成yml文件。
在配置文件中指定elasticsearch中對應(yīng)的ip+端口,也就是我們前幾天在虛擬機上安裝elasticsearch的ip和端口。
二、創(chuàng)建索引和映射
我們以前使用MySQL數(shù)據(jù)庫的時候,在Java中是實體類對應(yīng)了數(shù)據(jù)庫中的表數(shù)據(jù)。
同樣的道理,現(xiàn)在是索引庫了,在Java中也是使用實體類對應(yīng)對應(yīng)的索引庫。

注解@Document說明對應(yīng)的索引庫:
- indexName:索引庫名稱叫item。
- type:索引庫類型docs。
- shards:分片。
- replicas:副本。
注解@Field說明索引庫字段:
類型有很多種,double屬于數(shù)字型,text和string屬于字符型,其中text表示分詞,string表示不分詞,上述中的keyword其實也就對應(yīng)著string。
注意images這個字段,index=false表示不需要索引,說明該字段不需要搜索功能。

我們以前學(xué)數(shù)據(jù)庫的時候,在Java中操作數(shù)據(jù)庫使用到了JdbcTemplate。
現(xiàn)在是要操作索引庫,同樣的道理,也有一個ElasticsearchTemplate
①createIndex()
創(chuàng)建索引庫,參數(shù)為實體類的Class對象。
②putMApping()
說明字段映射關(guān)系,參數(shù)同上。
三、實現(xiàn)增刪改查
通過JdbcTemplate實現(xiàn)數(shù)據(jù)庫的增刪改查,索引庫中用ElasticsearchTemplate。
但是我們不用這種方式而是用其它方式。
畢竟我們現(xiàn)在操作數(shù)據(jù)庫也沒用JdbcTemplate而是常常使用通用mapper。
該方法也就類似于通用mapper。

在通用mapper中我們是創(chuàng)建一個自定義接口繼承mapper接口。
再說明泛型之后,就可以直接使用這個接口完成增刪改查操作了。
同樣的道理,在這里是也是自定義一個接口繼承ElasticsearchRepository接口。
關(guān)于這個接口的繼承體系圖通過上圖也能查看到,名稱也都是見名知義的。
1新增索引

saveAll方法,看它的名字也就知道了其對應(yīng)的也就是新增操作。
其中關(guān)于新增,可以添加一條數(shù)據(jù),也可以添加多條數(shù)據(jù),例子中使用的是批量操作。
注意:在正式項目中應(yīng)該是從數(shù)據(jù)庫這種查詢到需要實現(xiàn)搜索功能的數(shù)據(jù),再將這些數(shù)據(jù)添加到索引庫中,從而實現(xiàn)搜索功能。
我這邊為了方便是自己創(chuàng)建的偽數(shù)據(jù)。
2查詢索引

findAll也就是查詢所有的數(shù)據(jù),因為我們添加了多條數(shù)據(jù),所以查詢結(jié)果是一個集合。
增強for循環(huán)遍歷輸出,在控制臺上也就能查詢到新增的數(shù)據(jù)。
同樣的道理,還有deleteAll刪除索引,當(dāng)然這是都是最簡單最基礎(chǔ)的幾種api,后續(xù)更多用法再說明。
最后
行有不得反求諸己,我是@劉小愛
一個白天上班晚上學(xué)習(xí)的95后滬漂,不為其它,只為學(xué)會自律做好自己,也愿我的每日打卡能給你帶來勇氣,歡迎點贊關(guān)注和評論。