ElasticSearch的安装以及与springboot的集成

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 前言:elasticseach简称es,现在用得非常广泛,像百度等一些知名互联网公司都有用到es。那么es到底是什么呢?如何使用呢?下面就一起来学习一下。

前言:

elasticseach简称es,现在用得非常广泛,像百度等一些知名互联网公司都有用到es。那么es到底是什么呢?如何使用呢?下面就一起来学习一下。

一、es简介:

es是一个高度可扩展的开源全文搜索和分析引擎,可以快速的、近实时地对大数据进行存储、搜索和分析,用来支撑复杂的数据搜索需求和企业级应用。简单来说,它是一个搜索引擎,可以实现全文搜索,功能类似于lucene和solr。

二、es的安装:

下面介绍es的安装以及head插件的安装,都是在Windows上的安装。

1、es的安装:

(1)、下载:https://www.elastic.co/downloads/elasticsearch

(2)、安装:安装很简单,只需解压即可。解压后进入bin目录,运行里面的elasticsearch.bat,即可运行es。、

(3)、注册为Windows服务:每次启动都要运行这个文件很麻烦,可以将es注册为windows的本地。
在cmd命令窗口进入es的bin目录,然后执行如下命令:
elasticsearch-service.bat install
执行成功后就可以看到es的服务了:

img_b16106a8a52f7ced144635c25ebd136b.png
image.png

(4)、访问es:
启动redis服务后,访问localhost:9200即可看到如下界面:

img_c79909c747e1be314e3d7e09357c8b7c.png
image.png

2、head插件的安装:

head插件可以很方便的操作es,head插件与es的关系就像navicat与MySQL数据库的关系,不过head插件的界面也是通过访问网址浏览的。
(1)、下载head插件:https://github.com/search?q=elasticsearch-head

img_1a49c59b99f72b1c5d234fdf2321e7b5.png
image.png

下载好上图这个解压。
(2)、安装node.js: https://nodejs.org/en/download/
head插件需要node.js的支持,所以要安装它。
img_3d7b816682c293cec8dfdc64d5e0da97.png
image.png

安装一路next即可。输入 node -v若出现node.js的版本信息,则安装成功。

(3)、安装grunt:
运行head需要借助grunt命令,所以要安装。
在cmd窗口进入node.js安装的根目录,然后执行npm install -g grunt -cli

(4)、安装pathomjs:
在cmd命令窗口进入head插件解压后的根目录,然后执行npm install

(5)、连接es:
在es的安装根目录的config目录下有elasticsearch.yml,在此文件中添加如下内容:

img_c3de973a2b1421374e2a16bde3332406.png
image.png

(6)、运行head:
在cmd命令窗口进入head插件解压后的根目录,然后执行grunt server,如下图就启动成功。

img_11b6900e8bc4043926c80d604f8c6675.png
image.png

然后访问 localhost:9100看到如下画面就安装成功。
img_0066d2531429b680cb3bdf9721ef0eda.png
image.png

三、springboot集成es:

下载源码。
1、添加依赖:
build.gradle:

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')
    //集成es还需要这个依赖,不然会报classNotfound的错误
    compile('net.java.dev.jna:jna:4.3.0')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

以上是整个项目用到的依赖,也就是说,集成es只需要data-elasticsearchjna依赖。

2、实体层:
EsBlog.java:

import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "blog",type = "blog")//elasticsearch的注解
public class EsBlog implements Serializable {

    private static final long serialVersionUID = 4564729518133694581L;
    @Id
    private String id;
    private String title;
    private String summary;
    private String content;
}

3、repository:
EsBlogRepository.java:

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import com.zhu.estest.entity.EsBlog;

public interface EsBlogRepository extends ElasticsearchRepository<EsBlog, String> {
    /**
     * 分页查询博客
     * @param title
     * @param summary
     * @param content
     * @param pageable
     * @return
     */
   Page<EsBlog> findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title,String summary,String content,Pageable pageable);
}

这里就定义了一个方法,方法名非常长,它也和jpa一样,按照规则定义方法就不用自己去实现。这个方法就是分页查找包含指定title或summary或content的内容。

4、junit测试:
EsBlogRepositoryTest.java:

@RunWith(SpringRunner.class)
@SpringBootTest
public class EsBlogRepositoryTest {
    @Autowired
    private EsBlogRepository esBlogRepository;
    
    @Before
    public void initRepository() {
        //清除所有数据
        esBlogRepository.deleteAll();
        //存入数据
        esBlogRepository.save(new EsBlog("登鹳雀楼","王之涣的诗",
                "白日依山尽,黄河入海流。欲穷千里目,更上一层楼。"));
        esBlogRepository.save(new EsBlog("相思","王维的诗",
                "红豆生南国,春来发几枝。愿君多采撷,此物最相思。"));
        esBlogRepository.save(new EsBlog("静夜思","李白的诗",
                "床前明月光,疑是地上霜。举头望明月,低头思故乡。"));
    }
    
    @Test
    public void test() {
        Pageable  pageable = new PageRequest(0, 20);
        String title = "思";
        String summary = "相思";
        String content = "相思";
        Page<EsBlog> page = esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(
                title, summary, content, pageable);
        System.out.println(page.getTotalElements());
        for(EsBlog blog : page.getContent()) {
            System.out.println(blog);
        }
    }

}

这个测试类先往es中添加了三首唐诗作为数据,然后调用repository中的方法,查找title中含有“思”字或者summary中含有“相思”或者content中含有“相思”的内容。理论上应该返回除了登鹳雀楼以外的两条数据。


img_9003ad1e42019579289cb7c335b52033.png
image.png

运行junit确实返回两条数据。

5、controller层:
EsBlogController.java:

@RestController
@RequestMapping("/blogs")
public class EsBlogController {
    
    @Autowired
    private EsBlogRepository esBlogRepository;
    
    @GetMapping
    public List<EsBlog> list(@RequestParam("title") String title,
            @RequestParam("summary") String summary,
            @RequestParam("content") String content,
            @RequestParam(value="pageIndex",defaultValue="0") int pageIndex,
            @RequestParam(value="pageSize",defaultValue="10") int pageSize){
        Pageable  pageable = new PageRequest(pageIndex, pageSize);
        //数据是在junit测试中初始化的
        Page<EsBlog> page = esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(
                title, summary, content, pageable);
        return page.getContent();
    }

}

在浏览器中访问:


img_37be76af7da507c2e152a8ccac8f08a7.png
image.png

测试通过。

总结:

本文提供的es以及head插件的安装是在Windows上的安装,Linux和mac可能会有不同。至于springboot集成es,主要就是添加两个依赖,然后repository继承ElasticsearchRepository即可。ElasticsearchRepository接口封装了一些操作es的方法,我们直接调用就行,或者根据命名规则定义的方法,也不用自己实现,就类似于springData Jpa。

以上内容属于个人笔记整理,如有错误,欢迎批评指正!

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
存储 JSON Java
210 0
|
3月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
404 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
3月前
|
存储 人工智能 Java
Springboot集成AI Springboot3 集成阿里云百炼大模型CosyVoice2 实现Ai克隆语音(未持久化存储)
本项目基于Spring Boot 3.5.3与Java 17,集成阿里云百炼大模型CosyVoice2实现音色克隆与语音合成。内容涵盖项目搭建、音色创建、音频合成、音色管理等功能,适用于希望快速掌握Spring Boot集成语音AI技术的开发者。需提前注册阿里云并获取API Key。
|
3月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
363 2
|
3月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
173 2
|
3月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
122 11
|
3月前
|
物联网 Linux 开发者
快速部署自己私有MQTT-Broker-下载安装到运行不到一分钟,快速简单且易于集成到自己项目中
本文给物联网开发的朋友推荐的是GMQT,让物联网开发者快速拥有合适自己的MQTT-Broker,本文从下载程序到安装部署手把手教大家安装用上私有化MQTT服务器。
885 5
|
4月前
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
465 44
|
4月前
|
缓存 安全 Java
Shiro简介及SpringBoot集成Shiro(狂神说视频简易版)
Shiro简介及SpringBoot集成Shiro(狂神说视频简易版)
308 6