当前位置:   article > 正文

SpringBoot集成常用第三方框架-ES_springboot整合es

springboot整合es

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

一、ElasticSearch 概述

1.1 什么是ElasticSearch

Elasticsearch简称为es是一个开源的分布式RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。  Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有,但它也仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理,因为Lucene 非常复杂。  为了解决Lucene使用时的繁复性,于是Elasticsearch便应运而生。它使用 Java 编写,内部采用 Lucene 做索引与搜索,但是它的目标是使全文检索变得更简单,简单来说,就是对Lucene 做了一层封装,它提供了一套简单一致的 RESTful API 来帮助我们实现存储和检索。  当然,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确地形容:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索;

  • 一个分布式实时分析搜索引擎;

  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。

1.2 ElasticSearch发展历史

多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去

了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。

直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜

索功能。他发布了他的第一个开源项目,叫做“Compass”。

后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时

的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做

Elasticsearch。

第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代

码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功

能,不过Elasticsearch将永远开源且对所有人可用。

1.3 ElasticSearch和solr的区别

1.3.1 Elasticsearch

Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。

它用于全文搜索、结构化搜索、分析以及将这三者混合使用:

维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索(search-asyou-type)和搜索

纠错(did-you-mean)等搜索建议功能。

英国卫报使用Elasticsearch结合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时了

解公众对新发表的文章的回应。

StackOverflflow结合全文搜索与地理位置查询,以及more-like-this功能来找到相关的问题和答案。

Github使用Elasticsearch检索1300亿行的代码。

但是Elasticsearch不仅用于大型企业,它还让像DataDog以及Klout这样的创业公司将最初的想法变成可扩展的解决方案。Elasticsearch可以在你的笔记本上运行,也可以在数以百计的服务器上处理PB级别的数据 。

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏Lucene的复杂性,从而让全文搜索变得简单。

1.3.2 Solr

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。

二、ElasticSearch 集成SpringBoot

官方参考:Getting started | Java REST Client [7.16] | Elastic

2.1 创建SpringBoot工程

2.2 SpringBoot配置ES

添加es依赖

  1. <properties>
  2.    <java.version>8</java.version>
  3.    <elasticsearch.version>7.6.1</elasticsearch.version>
  4. </properties>
  5. <dependency>
  6.    <groupId>org.elasticsearch.client</groupId>
  7.    <artifactId>elasticsearch-rest-high-level-client</artifactId>
  8.    <version>7.6.1</version>
  9. </dependency>

在SpringBoot中创建ESConfig类,并注入到spring容器中

  1. @Configuration
  2. public class ESConfig {
  3.    @Bean
  4.    public RestHighLevelClient restHighLevelClient() throws UnknownHostException {
  5.        return new RestHighLevelClient(
  6.                RestClient.builder(
  7.                        new HttpHost("192.168.6.145",9200,"http")));
  8.   }
  9. }

三、Spring Data Elasticsearch

3.1 Spring Data 框架介绍

Spring Data是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA(Elasticsearch…)的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。

Spring Data的官网:Spring Data

常用模块

3.2 Spring Data Elasticsearch

Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch操作,将原始操作Elasticsearch的客户端API 进行封装 。Spring Data为Elasticsearch项目提供集成搜索引擎。Spring Data Elasticsearch POJO的关键功能区域为中心的模型与Elastichsearch交互文档和轻松地编写一个存储索引库数据访问层。

3.3 Spring Data Elasticsearch版本

springboot2.3.x版本可以兼容elasticsearch7.x版本。

3.4 Spring Data Elasticsearch框架集成

3.4.1 导入依赖

  1. <parent>
  2.    <artifactId>spring-boot-starter-parent</artifactId>
  3.    <groupId>org.springframework.boot</groupId>
  4.    <version>2.3.6.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7.    <dependency>
  8.        <groupId>org.springframework.boot</groupId>
  9.        <artifactId>spring-boot-starter-web</artifactId>
  10.    </dependency>
  11.    <dependency>
  12.        <groupId>org.projectlombok</groupId>
  13.        <artifactId>lombok</artifactId>
  14.        <optional>true</optional>
  15.    </dependency>
  16.    <dependency>
  17.        <groupId>org.springframework.boot</groupId>
  18.        <artifactId>spring-boot-starter-test</artifactId>
  19.        <scope>test</scope>
  20.    </dependency>
  21.    <dependency>
  22.        <groupId>org.springframework.boot</groupId>
  23.        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  24.    </dependency>
  25. </dependencies>

3.4.2 yml配置

  1. spring:
  2. elasticsearch:
  3.   rest:
  4.     uris: http://localhost:9200

3.4.3 document映射

  1. @Data
  2. @Document(indexName = "goods")
  3. public class Goods implements Serializable {
  4.    @Field(type = FieldType.Keyword)
  5.    private String id;
  6.    @Field(type = FieldType.Text)
  7.    private String goodsName;
  8.    @Field(type = FieldType.Integer)
  9.    private Integer store;
  10.    @Field(type = FieldType.Double)
  11.    private double price;
  12. }

3.4.4 dao数据访问

  1. @Repository
  2. public interface GoodsDao extends ElasticsearchRepository<Goods, String> {
  3. }

3.4.5 springboot启动类

  1. package com.atguigu;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class Application {
  6.    public static void main(String[] args) {
  7.        SpringApplication.run(Application.class,args);
  8.   }
  9. }

3.4.6 接口测试

  1. @Autowired
  2.    private GoodsDao goodsDao;
  3.    /**
  4.     * 添加文档
  5.     * */
  6.    @Test
  7.    public void saveTest(){
  8.        Goods goods = new Goods();
  9.        goods.setId("1");
  10.        goods.setGoodsName("华为手机");
  11.        goods.setStore(100);
  12.        goods.setPrice(5000);
  13.        goodsDao.save(goods);
  14.        System.out.println("添加成功...");
  15.   }
  16.    /**
  17.     * 根据ID查询文档
  18.     * */
  19.    @Test
  20.    public void findById(){
  21.        Goods goods = goodsDao.findById("1").get();
  22.        System.out.println(goods);
  23.   }

四,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/701559
推荐阅读
相关标签
  

闽ICP备14008679号