Springboot集成Elasticsearch的步驟與相關(guān)功能
集成配置步驟
步驟1:加入 Maven 相關(guān)依賴(lài)
<!-- 指定 Springboot 版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<relativePath/>
</parent>
<!-- 相關(guān)jar包 -->
<dependencies>
<!-- SpringBoot核心jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- web開(kāi)發(fā)包:包含Tomcat和Springmvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- ES 核心包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- lombok 實(shí)體簡(jiǎn)化插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
步驟2:配置 elasticsearch 的主機(jī)和端口
elasticsearch: host: 127.0.0.1 port: 9200

步驟3:配置 Elaseticsearch 客戶(hù)端
@Data
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
private String host;
private Integer port;
@Override
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port)));
}
}

步驟4:創(chuàng)建文檔實(shí)體
@Data
@Document(indexName = "users")
public class User {
@Id
@Field(type = FieldType.Long)
private Long id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Keyword)
private String sex;
@Field(type = FieldType.Integer)
private Integer age;
@Field(type = FieldType.Text)
private String address;
}

步驟5:創(chuàng)建 controller,service, dao 層
(5.1)contrller 層
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
}
(5.2)service 層
public interface UserService {
}
(5.3)service 實(shí)現(xiàn)層(UserDao 見(jiàn) 5.4)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
}
(5.4)dao 層
@Repository
public interface UserDao extends ElasticsearchRepository<User, Long> {
}
整個(gè)相關(guān)類(lèi)創(chuàng)建完成后,項(xiàng)目結(jié)構(gòu)應(yīng)該如下圖所示:

相關(guān)功能實(shí)現(xiàn)
這里以實(shí)際功能舉例,并列出 controller 和 service 層的實(shí)現(xiàn)類(lèi)寫(xiě)法作為參考。
主流的一些功能,ES 已經(jīng)給你封裝,默認(rèn)給與了支持(如:示例1-6),這些相關(guān)的實(shí)現(xiàn)不需要我們?cè)賹?xiě) dao 層,但一些較為業(yè)務(wù)性的查詢(xún),還需要自己手動(dòng)來(lái)寫(xiě)。
1. 添加文檔
controller 層:
@PostMapping("/save")
public String save(@RequestBody User user) {
long id = System.currentTimeMillis();
user.setId(id);
userService.save(user);
return "新增成功,id為:" + id;
}
service 層:
@Override
public Long save(User user) {
userDao.save(user);
return user.getId();
}
測(cè)試效果:

?2. 修改文檔
【注】新增文檔和修改文檔操作,dao 層都是調(diào)用的 save() 方法,當(dāng) id 不存在的時(shí)候,ES(ElasticSearch)就會(huì)執(zhí)行新增操作,當(dāng) id 對(duì)象已經(jīng)存在的時(shí)候,就會(huì)執(zhí)行修改操作。
controller 層:
@PostMapping("/update")
public String update(@RequestBody User user) {
userService.save(user);
return "修改成功";
}
service 層:
@Override
public Long save(User user) {
userDao.save(user);
return user.getId();
}
測(cè)試效果:

?3. 根據(jù)ID查詢(xún)文檔
controller 層:
@GetMapping("/{id}")
public User getById(@PathVariable("id") Long id) {
return userService.getById(id);
}
service 層:
@Override
public User getById(Long id) {
Optional<User> find = userDao.findById(id);
if (find.isPresent()) {
return find.get();
}
return null;
}
測(cè)試效果:

?4. 根據(jù)ID刪除文檔
controller 層:
@DeleteMapping("/{id}")
public String deleteById(@PathVariable("id") Long id) {
userService.deleteById(id);
return "刪除成功";
}
service 層:
@Override
public void deleteById(Long id) {
userDao.deleteById(id);
}
測(cè)試效果:

?5. 查詢(xún)所有文檔
controller 層:
@GetMapping("/all")
public List<User> all() {
return userService.getAll();
}
service 層:
@Override
public List<User> getAll() {
Iterable<User> users = userDao.findAll();
if (users == null) {
return Collections.emptyList();
}
List<User> userList = new ArrayList<User>();
users.forEach(o -> userList.add(o));
return userList;
}
測(cè)試效果:

?6. 條件查詢(xún)(單個(gè)條件)
如:查詢(xún)name包含"瑪麗"的數(shù)據(jù)
controller 層:
@GetMapping("/listByName")
public List<User> listByName(String name) {
return userService.getListByName(name);
}
service 層:
@Override
public List<User> getListByName(String name) {
return userDao.findByName(name);
}
dao 層:測(cè)試效果:

?7. 條件查詢(xún)(多條件)
如:查詢(xún) name包含"瑪麗",年齡為25的數(shù)據(jù)。
controller 層:
@GetMapping("/listByNameAndAge")
public List<User> listByNameAndAge(String name, Integer age) {
return userService.getListByNameAndAge(name, age);
}
service 層:
@Override
public List<User> getListByNameAndAge(String name, Integer age) {
return userDao.findByNameAndAge(name, age);
}
dao 層:
List<User> findByNameAndAge(String name, Integer age);

?8. 分頁(yè)查詢(xún)(降序)
controller 層:
@GetMapping("/listOrderByAgeDesc")
public List<User> listOrderByAgeDesc() {
return userService.getListOrderByAgeDesc();
}
service 層:
@Override
public List<User> getListOrderByAgeDesc() {
return userDao.findByOrderByAgeDesc();
}
dao 層:
List<User> findByOrderByAgeDesc();
測(cè)試效果:

?9. 分頁(yè)查詢(xún)(升序)
?controller 層:
@GetMapping("/listOrderByAgeAsc")
public List<User> listOrderByAgeAsc() {
return userService.getListOrderByAgeAsc();
}
service 層:
@Override
public List<User> getListOrderByAgeAsc() {
return userDao.findByOrderByAgeAsc();
}
dao 層:
List<User> findByOrderByAgeAsc();
測(cè)試效果:

?10. 分頁(yè)查詢(xún)
controller 層:
@GetMapping("/page")
public Page<User> page(Integer pageNum, Integer pageSize) {
return userService.getPage(pageNum, pageSize);
}
service 層:
@Override
public Page<User> getPage(int pageNum, int pageSize) {
// 注意,這里的pageNum是從0開(kāi)始的,如果要查詢(xún)第1頁(yè)數(shù)據(jù),pageNum應(yīng)該為0
Pageable pageable = PageRequest.of(pageNum, pageSize);
return userDao.findAll(pageable);
}
測(cè)試效果:

?11. 范圍查詢(xún)( > )
controller 層:
@GetMapping("/listGreaterThanAge")
public List<User> listGreaterThanAge(Integer age) {
return userService.getListGreaterThanAge(age);
}
service 層:
@Override
public List<User> getListGreaterThanAge(Integer age) {
return userDao.findByAgeGreaterThan(age);
}
dao 層:
List<User> findByAgeGreaterThan(Integer age);
測(cè)試效果:

12. 范圍查詢(xún)( >= )?
controller 層:
@GetMapping("/listGreaterThanEqualAge")
public List<User> listGreaterThanEqualAge(Integer age) {
return userService.getListGreaterThanEqualAge(age);
}
service 層:
@Override
public List<User> getListGreaterThanEqualAge(Integer age) {
return userDao.findByAgeGreaterThanEqual(age);
}
dao 層:
List<User> findByAgeGreaterThanEqual(Integer age);
測(cè)試效果:

?13. 范圍查詢(xún)( < )
controller 層:
@GetMapping("/listLessThanAge")
public List<User> listLessThanAge(Integer age) {
return userService.getListLessThanAge(age);
}
service 層:
@Override
public List<User> getListLessThanAge(Integer age) {
return userDao.findByAgeLessThan(age);
}
dao 層:
List<User> findByAgeLessThan(Integer age);
測(cè)試效果:

?14. 范圍查詢(xún)( <= )
controller 層:
@GetMapping("/listLessThanEqualAge")
public List<User> listLessThanEqualAge(Integer age) {
return userService.getListLessThanEqualAge(age);
}
service 層:
@Override
public List<User> getListLessThanEqualAge(Integer age) {
return userDao.findByAgeLessThanEqual(age);
}
dao 層:
List<User> findByAgeLessThanEqual(Integer age);
測(cè)試效果:

附:ElasticSearch中對(duì)索引的一些常用操作
1. 獲取Elasticsearch中所有的index:
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
2. 獲取某索引下所有的type:
獲取elasticsearch索引下所有的type定義
curl -XGET 'localhost:9200/elasticsearch/_mapping'
3. 刪除索引:
刪除elasticsearch1索引
curl -XDELETE 'localhost:9200/elasticsearch1?pretty'
4. 刪除某索引下的某type數(shù)據(jù):
刪除索引elasticsearch下的article類(lèi)型
curl -XDELETE 'http://localhost:9200/elasticsearch/article/'
5. 查看某索引的某type下所有的數(shù)據(jù):
查找elasticsearch索引中所有的類(lèi)型為Company的數(shù)據(jù)
http://localhost:9200/elasticsearch/Company/_search
總結(jié)
到此這篇關(guān)于Springboot集成Elasticsearch的文章就介紹到這了,更多相關(guān)Springboot集成Elasticsearch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot集成ElasticSearch實(shí)現(xiàn)搜索功能
- SpringBoot3集成ElasticSearch的方法詳解
- SpringBoot集成elasticsearch使用圖文詳解
- SpringBoot集成ElasticSearch的示例代碼
- SpringBoot框架集成ElasticSearch實(shí)現(xiàn)過(guò)程示例詳解
- springboot集成elasticsearch7的圖文方法
- SpringBoot集成Elasticsearch過(guò)程實(shí)例
- Springboot集成spring data elasticsearch過(guò)程詳解
- SpringBoot與Elasticsearch8.0集成
相關(guān)文章
解析Mybatis Porxy動(dòng)態(tài)代理和sql解析替換問(wèn)題
這篇文章主要介紹了Mybatis Porxy動(dòng)態(tài)代理和sql解析替換,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
@DubboService注解使用以及應(yīng)用場(chǎng)景和示例代碼
文章詳細(xì)介紹了Dubbo框架中@DubboService注解的使用,包括其核心定義、屬性詳解、應(yīng)用場(chǎng)景及示例代碼,該注解用于簡(jiǎn)化Dubbo服務(wù)的暴露配置,支持靈活的服務(wù)屬性配置,并提供了多種服務(wù)治理功能2026-02-02
基于批處理腳本bat打造一個(gè)高效Java版本切換工具
本文介紹了作者開(kāi)發(fā)的一款用于Windows系統(tǒng)多Java版本自動(dòng)化管理的批處理工具,該工具具備自動(dòng)掃描JDK目錄、智能識(shí)別版本號(hào)、權(quán)限管理、雙重設(shè)置、清理重復(fù)路徑、實(shí)時(shí)驗(yàn)證等功能,需要的朋友可以參考下2026-01-01
spring?boot集成smart-doc自動(dòng)生成接口文檔詳解
這篇文章主要介紹了spring?boot集成smart-doc自動(dòng)生成接口文檔詳解,smart-doc是一款同時(shí)支持java?restful?api和Apache?Dubbo?rpc接口文檔生成的工具,smart-doc顛覆了傳統(tǒng)類(lèi)似swagger這種大量采用注解侵入來(lái)生成文檔的實(shí)現(xiàn)方法2022-09-09
SpringSecurity導(dǎo)致SpringBoot跨域失效的問(wèn)題解決
本文主要介紹了SpringSecurity導(dǎo)致SpringBoot跨域失效的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
一次Spring無(wú)法啟動(dòng)的問(wèn)題排查實(shí)戰(zhàn)之字節(jié)碼篇
最近學(xué)習(xí)了spring相關(guān)知識(shí),公司項(xiàng)目也用到了spring,下面這篇文章主要給大家介紹了一次Spring無(wú)法啟動(dòng)的問(wèn)題排查實(shí)戰(zhàn)之字節(jié)碼篇的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
詳解Java中l(wèi)og4j.properties配置與加載應(yīng)用
這篇文章主要介紹了 log4j.properties配置與加載應(yīng)用的相關(guān)資料,需要的朋友可以參考下2018-02-02

