首先 我們?cè)?ES中加一個(gè) books 索引 且?guī)в蠭K分詞器的索引
首先 pom.xml導(dǎo)入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
application配置文件中編寫如下配置
spring.elasticsearch.hosts: 172.16.5.10:9200
我這里是用的yml格式的
spring:
elasticsearch:
hosts: http://localhost:9200
告訴它指向 我們本地的 9200服務(wù)
然后 我們?cè)趩?dòng)類同目錄下 創(chuàng)建一個(gè)叫 domain的包 放屬性類
然后在這個(gè)包下創(chuàng)建一個(gè)叫 books的類
參考代碼如下
package com.example.webdom.domain;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.stereotype.Component;
@Component
@Document(indexName = "books")
public class books {
private String id;
private String type;
private String name;
private String describe;
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getType() {
return type;
}
public String getDescribe() {
return describe;
}
public void setId(String id) {
this.id = id;
}
public void setType(String type) {
this.type = type;
}
public void setName(String name) {
this.name = name;
}
public void setDescribe(String describe) {
this.describe = describe;
}
@Override
public String toString() {
return "books{" +
"id='" + id + '\'' +
", type='" + type + '\'' +
", name='" + name + '\'' +
", description='" + describe + '\'' +
'}';
}
}
這里 我們就定義了幾個(gè)屬性 聲明get set函數(shù) 然后 為了不免錯(cuò)誤 我們id直接給了個(gè)字符串類型
重寫了toString 讓大家能夠更直觀的看到屬性
然后 Document 的indexName 告訴程序 我們要用的是哪一個(gè)索引 這里我們給了個(gè) books 表示操作books 索引
然后 我們創(chuàng)建一個(gè)Mapper接口 這里 我們直接就叫 BooksMapper
接口代碼如下
package com.example.webdom.service;
import com.example.webdom.domain.books;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BoooksMaaper extends ElasticsearchRepository<books,String> {
}
它需要繼承 ElasticsearchRepository 操作ES的一個(gè)接口 然后通過 Repository 將它加到spring容器中
然后 我們?cè)趩?dòng)類同目錄下的 config 包 沒有就建一個(gè) 下面創(chuàng)建一個(gè)類 叫 ESClientConfig 名字無所謂
然后 編寫代碼如下
package com.example.webdom.config;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClientBuilder;
@Configuration
public class ESClientConfig {
@Autowired
private Environment environment;
@Bean
public RestHighLevelClient elasticsearchClient() {
String elasticsearchHosts = environment.getProperty("spring.elasticsearch.hosts");
RestClientBuilder builder = RestClient.builder(HttpHost.create(elasticsearchHosts));
// 設(shè)置其他配置,如認(rèn)證信息、連接超時(shí)等
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
}
然后 我們?cè)跍y(cè)試類 中將這個(gè)接口條件裝配進(jìn)來
測(cè)試類代碼編寫如下
package com.example.webdom;
import com.example.webdom.domain.books;
import com.example.webdom.service.BoooksMaaper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class WebDomApplicationTests {
@Autowired
private BoooksMaaper BoooksMaaper;
@Test
void set() {
books bookdai = new books();
bookdai.setId("1");
bookdai.setType("愛貓當(dāng)?shù)淖晕倚薷臉?);
bookdai.setName("愛護(hù)貓貓");
bookdai.setDescribe("幫助所有愛貓當(dāng)快速了解貓貓");
books book = BoooksMaaper.save(bookdai);
System.out.println(book);
}
}
這里 我們條件裝配了自己寫的接口 BoooksMaaper
然后 books實(shí)體類 new出來 然后 用set方法給每一個(gè)字段賦值
最后調(diào)用 save 添加方法 它有一個(gè)返回值 就是我們的屬性類實(shí)體對(duì)象
我們右鍵運(yùn)行
此時(shí) 我們就運(yùn)行成功了 然后 可以看到 save 返回的這個(gè)對(duì)象 就是我們添加進(jìn)去的東西了
然后 我們通過請(qǐng)求查詢一下 books索引下面的文檔
http://localhost:9200/books/_search get
就會(huì)看到 這里確實(shí)是進(jìn)來了
然后呢 這個(gè)東西的修改比較有意思
我們還是這樣一段代碼
books bookdai = new books();
bookdai.setId("1");
bookdai.setType("vue");
bookdai.setName("vue基礎(chǔ)到進(jìn)階");
bookdai.setDescribe("測(cè)試vue內(nèi)容修改");
books book = BoooksMaaper.save(bookdai);
System.out.println(book);
有些人可能已經(jīng)蒙了 save不是添加嗎?
這里的設(shè)定非常有趣呀 save 你的id如果有 它會(huì)覆蓋 如果沒有 就是添加
我們的id 1是已經(jīng)存在的 所以 它會(huì)將我們前面添加那條id為1的數(shù)據(jù)覆蓋掉 就是修改功能了
運(yùn)行之后 控制臺(tái)輸出一切正常
然后 我們來查一下
會(huì)發(fā)現(xiàn) 確實(shí)是實(shí)現(xiàn)了一個(gè)修改的效果
然后 我們來看 ES最有特殊的查詢
其實(shí)ES主要的價(jià)值就在于分詞的一個(gè)查詢
首先是查詢?nèi)?findAll
我們這樣寫
Iterable<books> all = BoooksMaaper.findAll();
for (books book : all){
System.out.println("book = " +book);
}
調(diào)用 findAll 返回一個(gè) 泛型為我們實(shí)體類的Iterable接口集合
然后 for遍歷這個(gè)集合 輸出每一次結(jié)果
運(yùn)行代碼 因?yàn)槲覀兛偣簿鸵粭l數(shù)據(jù) 所以輸出的內(nèi)容就一條 findAll就是查詢?nèi)?br>
然后 按照id查詢 findById
Optional<books> byId = BoooksMaaper.findById("1");
System.out.println(byId);
我們查詢id為1的內(nèi)容 并輸出
右鍵運(yùn)行代碼
這里 也是順利查出來了
然后 他有一個(gè)比較特殊函數(shù) 感覺不是很實(shí)用findAllById
它支持傳入list數(shù)組
可以傳給它多個(gè)id 然后帶出多條數(shù)據(jù)
ArrayList<String> ids = new ArrayList<>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");
Iterable<books> byId = BoooksMaaper.findAllById(ids);
查詢 id 1 2 3 4的數(shù)據(jù) 然后形成一個(gè) 實(shí)體類泛型的 Iterable集合
然后 我們來說自定義的查詢方法
我們 可以在自己寫的 BoooksMaaper 接口中寫一個(gè)這樣的函數(shù)
//自定義 根據(jù)name查詢
List<books> findByName(String name);
這里需要注意 findBy 后面 跟自己要條件查詢的字段名 首字母大寫 因?yàn)槿绻悴贿@樣 它是找不到你要查哪個(gè)字段的
然后 我們測(cè)試類來調(diào)用這個(gè)函數(shù)
List<books> byId = BoooksMaaper.findByName("vue");
System.out.println(byId);
運(yùn)行代碼 這里也順利通過 vue 模糊查詢到了
最后刪除方法
我們就看個(gè)根據(jù)id刪除吧 deleteById
沒有返回值
我們直接寫文章來源:http://www.zghlxwxcb.cn/news/detail-825313.html
BoooksMaaper.deleteById("1");
右鍵運(yùn)行代碼
運(yùn)行狀態(tài)是OK的 但是 看不出有沒有成功
我們請(qǐng)求查詢一下索引下的文檔
很明顯 已經(jīng)刪掉了文章來源地址http://www.zghlxwxcb.cn/news/detail-825313.html
到了這里,關(guān)于java SpringBoot2.7整合Elasticsearch(ES)7 進(jìn)行文檔增刪查改的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!