Spring Boot 整合Elasticsearch入门

这篇具有很好参考价值的文章主要介绍了Spring Boot 整合Elasticsearch入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Spring Data Elasticsearch

Spring Data ElasticsearchSpring Data项目的子项目,提供了ElasticsearchSpring的集成。实现了Spring Data Repository风格的Elasticsearch文档交互风格,让你轻松进行Elasticsearch客户端开发。

2. 个人的一些看法

应粉丝要求特地将Elasticsearch整合到Spring Boot 中去。本来打算整合到kono脚手架中,但是转念一想这样并不是非常合适,一般搜索建议作为一个独立的平台运作,小公司可作为一个独立的服务,大公司可作为一个搜索中台。一般我认为虽然Elasticsearch提供了搜索功能,大部分情况下我们并不像常规的关系型数据库一样进行直接写入,而是通过同步的方式进行同步或者预热写入数据。

springboot 和elasticsearch版本对应,spring boot,elasticsearch,jenkins,java,学习

具体的架构不是本文要讲的,在 ES 的 CSDN 官方博客里面有比较具体的解决方案。本文是在你已经搭建好Elasticsearch集群的前提下进行的。

2. 版本对应

相关项目的版本对应关系如下:

Spring Data Release Train Spring Data Elasticsearch Elasticsearch Spring Boot
Neumann 4.0.x 7.6.2 2.3.x
Moore 3.2.x 6.8.6 2.2.x
Lovelace 3.1.x 6.2.2 2.1.x
Kay 3.0.x 5.5.0 2.0.x
Ingalls 2.1.x 2.4.0 1.5.x

根据我平常的做法,我选择Elasticsearch 7.6.2Spring Boot 2.3.3作为版本基准进行集成。

3. 依赖引入及配置

只需要引入下面的依赖就可以集成Elasticsearch :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

关于配置有两种一种面向传统的Restful:

spring:
  elasticsearch:
    rest:
      # 逗号分隔的Elasticsearch实例使用的列表
      uris: http://localhost:9200
      # 链接超时时间
      connection-timeout:
      # 读取超时时间
      read-timeout:
      # ES 用户名
      username:
      # ES 密码
      password:

如果你都采用默认的配置,可以什么都不配置,包括uris

另一种面向反应式:

spring:
  data:
    elasticsearch:
      client:
        #  反应式相关的配置
        reactive:
        #  端点
          endpoints:
          connection-timeout:
          max-in-memory-size:
          socket-timeout:
          use-ssl:
          username:
          password:

这里配合的是Spring Webflux反应式框架,我个人其实更加倾向于此,但是作为目前的主流还是选择了第一种。

务必保证spring.data.elasticsearch.repositories.enabled = true,否则无法使用Spring Data Repository模式。

4. 操作

这里演示面向传统的Restful,一共有两种风格。假如我们向ES写入了Blog

{
  "blogId": "132435553",
  "blogTitle": "脚手架集成elasticsearch",
  "author": "felord",
  "content": "全称为Object Storage Service,也叫对象存储服务,是一种解决和处理离散单元的方法,可提供基于分布式系统之上的对象形式的数据存储服务,具有可拓展、可管理、低成本等特点,支持中心和边缘存储,能够实现存储需求的弹性伸缩,主要应用于海量数据管理的各类场景。\n\n这概念真是够难以理解的。简单说点我知道的吧,平常我们的文件地址都是 /User/felord/video/xxx.mp4的目录树结构,系统先要找到User,然后一级一级往下找一直到目标为止,这是一种结构化的存储方式。对象存储就不一样了,所有的文件都放在一个特定的池子里,只不过文件的携带有它自己的元信息,通过元信息去检索文件。",
  "url": "https://felord.cn/my-spring-boot-day7.html",
  "publishedTime": "2020-08-30T22:17:40"
}

对应的POJO对象为:

/**
 * @author felord.cn
 * @since 2020/8/30 16:10
 */
@Document(indexName = "blogs")
@Data
public class Blog {
    @Id
    private String blogId;
    private String blogTitle;
    private String author;
    private String content;
    private String url;
    @Field(type = FieldType.Date,format = DateFormat.date_hour_minute_second)
    private LocalDateTime publishedTime;
}
  • @Document用来标记文档对象,包含了该文档的一些元信息,索引副本数,分片数。

  • @Id 文档的标识符。

  • @Field 文档字段的一些元信息配置,类型、名称、分词器等等。

主要有以上三种,还有其它的一些注解标记,这里不再讲述。

4.1 ElasticsearchRestTemplate

RedisTemplate相信你已经不陌生了,同样的,Spring Data Elasticsearch提供了ElasticsearchRestTemplate来操作Elasticsearch,增删改查应有尽有。这里演示进行复杂的Criteria查询。

从 blogs 索引中查询 blogId 为 132435553 而且包含 elastic 词汇的标题的文档,同时查询词汇高亮

@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Test
void testTemplate() {

    // 构造条件
    Criteria criteria = Criteria.where(new SimpleField("blogId"))
            .is("132435553")
            .and(new SimpleField("blogTitle"))
            .contains("elastic");

    CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);
    // 高亮
    HighlightBuilder blogTitle = SearchSourceBuilder.highlight().field("blogTitle");
    HighlightQuery highlightQuery = new HighlightQuery(blogTitle);
    criteriaQuery.setHighlightQuery(highlightQuery);
    SearchHits<Blog> blogSearchHits = elasticsearchRestTemplate.search(criteriaQuery, Blog.class);
    blogSearchHits.getSearchHits().forEach(System.out::println);
}

4.2 Spring Data Repository

Spring Data Repository的核心接口是Repository。这个接口需要领域类(比如上面的Blog)跟领域类的 ID 类型作为参数。这个接口主要是让你能知道继承这个类的接口的类型。CrudRepository提供了对被管理的实体类的一些常用增删改查方法。那么针对Elasticsearch提供了各种特色的接口:

springboot 和elasticsearch版本对应,spring boot,elasticsearch,jenkins,java,学习

Repository 模式提供了一种利用方法名称进行条件构造的查询方式。

springboot 和elasticsearch版本对应,spring boot,elasticsearch,jenkins,java,学习

这种方式好处就是语义化,坏处就是方法名称可能非常的长。对于 4.1 中的例子我们可以简化为:

/**
 * @author felord.cn
 * @since 2020/8/30 21:32
 */
public interface BlogRepository extends ElasticsearchRepository<Blog,String> {



    @Highlight(fields = {
            @HighlightField(name = "blogTitle")
    })
    List<SearchHit<Blog>> searchBlogByBlogIdAndBlogTitleContains(String blogId, String titleContains);


}

另一种是采用注解方式,使用@Query注解,比如我们根据blogId进行查询我们可以这么写:

    @Query("{\"match\": {\"blogId\": \"?0\" }}")
//    @Query("{\"match\": {\"blogId\":{\"query\": \"?0\"}}}")
    Blog searchById(String blogId);

这个优点就是更加灵活,而且写法也更加随意简单;缺点就是需要熟悉Spring Data Elasticsearch以及Elasticsearch的查询语法,有一定的学习成本。

总结

以上就是简单的Spring Data Elasticsearch入门,对于使用Elasticsearch的项目来说,一般都具有了很大的数据量,所以要根据业务的需要进行具体的设计,Spring Data Elasticsearch能让我们非常方便进行搜索操作,如果你在使用中遇到什么问题可以通过公众号:码农小胖哥留言进行讨论。springboot 和elasticsearch版本对应,spring boot,elasticsearch,jenkins,java,学习

 文章来源地址https://www.toymoban.com/news/detail-850258.html

到了这里,关于Spring Boot 整合Elasticsearch入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Spring Boot中整合Elasticsearch并实现高亮搜索

    本文详细介绍了如何在Spring Boot项目中整合Elasticsearch,实现高亮搜索功能。通过添加依赖、配置Spring Boot、为实体类添加注解,以及在Service层实现高亮搜索,读者能够了解如何在实际项目中利用Spring Boot Data Elasticsearch来操作Elasticsearch并实现高亮搜索。验证示例演示了如何使用RESTful API端点来搜索并获取包含高亮字段的用户列表,为读者提供了实际应用的参考。这篇文章将帮助读者轻松掌握Spring Boot与Elasticsearch的整合方法,从而为项目增加强大的搜索功能。

    2024年02月06日
    浏览(31)
  • 知识点13--spring boot整合elasticsearch以及ES高亮

    本章知识点沿用知识点12的项目,介绍如何使用spring boot整合ES,没有ES的去我主页 各类型大数据集群搭建文档--大数据原生集群本地测试环境搭建三 中可以看到ES如何搭建 不管你有没有ES,最好是没有,因为一定要知道一点,一定要去官网查一下你当前用的spring boot data es的版

    2024年02月12日
    浏览(32)
  • Elasticsearch基础入门及整合SpringBoot

    目录 一.下载镜像文件 二.创建实例 2.1 创建elasticsearch实例 2.2 创建Kibana实例 三.es初步索引 1、_cat 2、索引一个文档(保存) 3、查询文档  4.更新文档 5.删除文档索引   6.bulk 批量 API 四.进阶检索 1、SearchAPI  2、Query DSL 1)、基本语法格式 Elasticsearch 提供了一个可以执行查询的

    2024年02月04日
    浏览(29)
  • spring boot集成Elasticsearch-SpringBoot(25)

      搜索引擎(search engine )通常意义上是指:根据特定策略,运用特定的爬虫程序从互联网上搜集信息,然后对信息进行处理后,为用户提供检索服务,将检索到的相关信息展示给用户的系统。   而我们讲解的是捜索的索引和检索,不涉及爬虫程序的内容爬取。大部分公司

    2023年04月09日
    浏览(94)
  • spring boot整合elasticsearch报Unable to parse response body for Response

    具体报错信息是这样的 执行添加的功能时 原因是因为es服务器的响应程序解析不了,有可能是spring-boot版本低了,没有做这方面的处理,我的es是8.0版本的,但是数据是能保存进es的,而且es那边也不报错,所以我干脆在添加的方法上做个try{}catch(){},捕捉异常处理,代码如下:

    2024年02月16日
    浏览(40)
  • 基于spring-boot-starter-data-elasticsearch整合elasticsearch于window系统

    在配置环境中会需要到elasticsearch和kibana,这两个和spring-boot-starter-data-elasticsearch都必须得保持版本一致,我们可以通过查看他maven的配置: 比如我使用的是 spring-boot-starter-data-elasticsearch:2.7.3 查看到他的maven的结构后可以看到他们都指向了elasticsearch的一个版本7.17.4,因此在电

    2024年04月25日
    浏览(36)
  • SpringBoot中整合ElasticSearch快速入门以及踩坑记录

    若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 参考上面搭建项目。 Elasticsearch 是java开发的,基于 Lucene 的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于R

    2024年01月17日
    浏览(46)
  • Springboot --- 整合spring-data-jpa和spring-data-elasticsearch

    SpringBoot: 整合Ldap. SpringBoot: 整合Spring Data JPA. SpringBoot: 整合Elasticsearch. SpringBoot: 整合spring-data-jpa和spring-data-elasticsearch. SpringBoot: 整合thymeleaf. SpringBoot: 注入第三方jar包. SpringBoot: 整合Redis. SpringBoot: 整合slf4j打印日志. SpringBoot: 整合定时任务,自动执行方法. SpringBoot: 配置多数据源

    2023年04月25日
    浏览(46)
  • SpringBoot整合Spring Data Elasticsearch,写给互联网大厂员工的真心话

    @RunWith(SpringRunner.class) @SpringBootTest(classes = ItcastElasticsearchApplication.class) public class IndexTest { @Autowired private ElasticsearchTemplate elasticsearchTemplate; //注入ElasticsearchTemplate类 @Test public void testCreate(){ // 创建索引,会根据Item类的@Document注解信息来创建 elasticsearchTemplate.createIndex(Item.class)

    2024年04月14日
    浏览(57)
  • 18、全文检索--Elasticsearch-- SpringBoot 整合 Spring Data Elasticsearch(异步方式(Reactive)和 传统同步方式 分别操作ES的代码演示)

    启动命令行窗口,执行:elasticsearch 命令即可启动 Elasticsearch 服务器 三种查询方式解释: 方法名查询: 就是全自动查询,只要按照规则来定义查询方法 ,Spring Data Elasticsearch 就会帮我们生成对应的查询语句,并且生成方法体。 @Query 查询 : 就是半自动查询, 按照 S

    2024年03月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包