SpringBoot整合Elasticserach搜索引擎

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

前言

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.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.5.2</version>
</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()方法执行结果如下)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云丶言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值