热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot整合Elasticserach搜索引擎

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开


说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正。若在阅读时有任何的问题,也可通过评论提出,本人将根据自身能力对问题进行一定的解答。



前言

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的
,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

而我们在操作Elasticsearch时,需要发送PUT、POST等REST API请求,并在请求体加上json信息来实现具体操作。而SpringBoot为我们整合了Elasticsearch,大大的简化了这些操作,我们只需要调用对应的方法即可完成操作Elasticsearch目的,下面我们来具体来讲述SpringBoot整合Elasticsearch的具体流程,安全带系好,我们要开始粗发了!!!





一、引入依赖

pom.xml(主要导入spring-boot-starter-data-elasticsearch
依赖)

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.5.2version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-elasticsearchartifactId>
<version>2.5.2version>
dependency>

二、配置文件

application.yml

spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9200 # Elasticsearch地址
cluster-name: elasticsearch # 默认为elasticsearch
repositories:
enabled: true # 开启本地存储

三、索引对象

Book.java(创建es的索引对象Book

package com.example.estest.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import java.io.Serializable;
@Document(indexName = "book")
public class Book implements Serializable {
@Id
private String id;
@Field
private String name;
public Book(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

四、Dao层对象

BookRepository.java(SpringBoot为我们简化了对Elasticsearch的操作,并封装在了ElasticsearchRepository
对象中,因此我们需要创建一个与新建索引Book对应的Dao层对象来操作es中的Book索引)

package com.example.estest.repository;
import com.example.estest.entity.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
List<Book> findBooksByName(String name);
}

五、编写测试类

ESTestApplicationTests.java(编写测试类,用于测试BookRepositroy对象对es的增、删、改、查
的操作)

package com.example.estest;
import com.example.estest.entity.Book;
import com.example.estest.repository.BookRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ESTestApplicationTests {
@Autowired
BookRepository bookRepository;
/*
* 插入操作
*/

@Test
void insertTest() {
Book book = new Book("1", "基督山伯爵");
bookRepository.save(book);
System.out.println("插入操作执行成功!");
findAllTest();
}
/*
* 通过文档id进行删除
*/

@Test
void deleteByIdTest() {
bookRepository.deleteById("1");
System.out.println("删除操作执行成功!");
findAllTest();
}
/*
* 修改操作
*/

@Test
void updateTest() {
Book book = bookRepository.findById("1").get();
book.setName("克里斯汀");
bookRepository.save(book);
System.out.println("修改操作执行成功!");
findByIdTest();
}
/*
* 通过文档id查找
*/

@Test
void findByIdTest() {
System.out.println("搜索结果:" + bookRepository.findById("1"));
}
/*
* 查找该索引下所有文档
*/

@Test
void findAllTest() {
Iterable<Book> iter = bookRepository.findAll();
System.out.println("该索引下所有文档:");
for (Book book : iter) {
System.out.println(book);
}
}
}

测试

1.增

插入操作:首先实例化一个Book索引对象,并调用dao层BookRepository的save()
方法,将新创建的Book对象存入Elasticsearch中(执行测试类中的insertTest()方法执行结果如下图)

2.查

查找操作:如果我们通过文档id查找数据,可以使用findById()
方法(执行测试类中的findByIdTest()方法执行结果如下图)

3.改

修改操作:Elasticsearch中,文档的id是唯一的,如果新插入的数据的文档id已经在es中存在,则es会将新的文档覆盖旧的文档(执行测试类中的updateTest()方法执行结果如下图)

4.删

删除操作:我们只需调用具体方法即可,如按照文档id删除数据,则是deleteById()
方法(测试类中的deleteByIdTest()方法执行结果如下)



推荐阅读
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • ​如何设计一个安全可靠的 API 接口?
    作者|阿文责编|屠敏出品|CSDN(ID:CSDNnews)最近几年,随着RESTfulAPI开始风靡,使用H ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • REST API 时代落幕,GraphQL 持续引领未来
    尽管REST API已广泛使用多年,但在深入了解GraphQL及其解决的核心问题后,我深感其将引领未来的API设计趋势。GraphQL不仅提高了数据查询的效率,还增强了灵活性和性能,有望成为API开发的新标准。 ... [详细]
  • 本文深入探讨了ASP.NET Web API与RESTful架构的设计与实现。ASP.NET Web API 是一个强大的框架,能够简化HTTP服务的开发,使其能够广泛支持各种客户端设备。通过详细分析其核心原理和最佳实践,本文为开发者提供了构建高效、可扩展且易于维护的Web服务的指导。此外,还讨论了如何利用RESTful原则优化API设计,确保系统的灵活性和互操作性。 ... [详细]
  • SpringBoot非官方教程|终章:文章汇总springboot非官方教程,可能最接近于官方的一个教程,大多数案例都来自于官方文档,为了更好的理解,加入了个人的改造。码云下载:htt ... [详细]
  • 洞见RSAC|点击获取企业安全策略“工具包”
    为用户提供安全智 ... [详细]
  • spring cloud微服务实战 pdf_springcloud微服务架构开发实战:常见微服务的消费者
    常见微服务的消费者本节就常见的微服务的消费者进行介绍。在Java领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign等。ApacheHttpClientAp ... [详细]
  • 谈起RESTFUL大家未免都耳熟能详,但是要介绍一下它是什么,可能就是停留在听过或者见过的阶段了。一贯喜欢以通俗的语言来消化知识的小马自然不会放过它了& ... [详细]
  • 摘要:本文中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务在读者正在工作的 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
author-avatar
黑漆高傲的眼眸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有