springboot中使用Elasticsearch

一、背景

搜索这个特性可以说是在web系统中无处不在,现在很少有网站或者系统不提供搜索功能了,所以, 搜索这个东西,表面上看功能很简单,就是一个搜索框,输入关键字,然后搜出来想要的内容就好了。但是做起来并不简单,如果要考虑性能,就需要使用专门的数据库,比如比较流行的就是Elasticsearch。

二、Elasticsearch介绍

Elasticsearch是一个基于Apache Lucene的开源分布式、高扩展、近实时的搜索引擎,主要用于海量数据的快速存储、实时检索和高效率分析。它通过简单的RESTful API提供了强大的搜索功能,使全文搜索变得简单。Elasticsearch的主要特点包括:

  1. 分布式:Elasticsearch能够将数据分散到多个服务器上存储、检索和分析,适用于海量数据的应用场景。
  2. 高扩展性:Elasticsearch可以扩展到上百台服务器,处理PB级别的数据,具备良好的水平伸缩性。
  3. 近实时性:Elasticsearch能够近乎实时地存储和搜索数据,提供快速的响应时间。
  4. 多租户能力:Elasticsearch支持多用户并发访问,能够处理大量用户请求。
  5. 丰富的功能:除了基本的搜索功能外,Elasticsearch还提供了诸如聚合、分析、推荐等高级功能。
  6. 易用性:Elasticsearch提供了简单易用的API和友好的用户界面,方便用户进行数据搜索、分析和可视化。
  7. 安全性:Elasticsearch提供了丰富的安全功能,如身份验证、授权、加密等,确保数据的安全性。
  8. 社区支持:Elasticsearch拥有庞大的用户社区和丰富的生态系统,方便用户获取支持和资源。

Elasticsearch在许多领域得到了广泛应用,如日志分析、电商、社交网络、物联网等。它为企业提供了高效、可靠、可扩展的全文搜索引擎,帮助企业从海量数据中快速获取有价值的信息。

三、Elasticsearch的使用

在系统中我们一般保留一份数据到mysql作为持久化,一份保存到ES用作搜索

ElasticSearch和MySQL在工作中的应用场景:先保存一份数据到MySQL,再保存一份到ElasticSearch,在ES中搜索

要在Spring Boot中使用Elasticsearch,您需要执行以下步骤:

  1. 添加依赖:在您的Spring Boot项目的pom.xml文件中添加Elasticsearch的依赖。例如:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>  
</dependency>
  1. 配置连接信息:在您的application.properties或application.yml文件中添加Elasticsearch的连接配置。例如:

spring.data.elasticsearch.cluster-name=your-cluster-name  
spring.data.elasticsearch.cluster-nodes=your-cluster-nodes

其中,your-cluster-name是您的Elasticsearch集群名称,your-cluster-nodes是您的Elasticsearch集群节点地址。

  1. 创建实体类:根据您的数据模型创建实体类,并使用Elasticsearch的注解来标记字段。例如:

import org.springframework.data.annotation.Id;  
import org.springframework.data.elasticsearch.annotations.Document;  
import org.springframework.data.elasticsearch.annotations.Field;  
import org.springframework.data.elasticsearch.annotations.FieldType;  
  
@Document(indexName = "your-index-name", type = "your-document-type")  
public class YourEntity {  
    @Id  
    private String id;  
    @Field(type = FieldType.Text)  
    private String name;  
    // 其他字段和getter/setter方法...  
}

其中,your-index-name是您的索引名称,your-document-type是您的文档类型。

  1. 创建仓库接口:创建一个继承自Elasticsearch Repository接口的自定义仓库接口,以便进行数据操作。例如:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;  
import org.springframework.stereotype.Repository;  
  
@Repository  
public interface YourEntityRepository extends ElasticsearchRepository<YourEntity, String> {  
}
  1. 使用仓库接口:在您的服务类中注入自定义仓库接口,并使用它进行数据操作。例如:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  
  
@Service  
public class YourEntityService {  
    private final YourEntityRepository yourEntityRepository;  
  
    @Autowired  
    public YourEntityService(YourEntityRepository yourEntityRepository) {  
        this.yourEntityRepository = yourEntityRepository;  
    }  
    // 其他方法...  
}

为什么不用MySQL实现全文搜索?
MySQL是传统的关系型数据库,是当下web应用开发中最流行的关系型数据库.是支持事务的!但是MySQL也是有缺点的,如果需要全文进行模糊搜索,MySQL性能是非常低的.例如如下场景:

假如有一张手机信息表,里面有1亿的数据,我想要在从中搜索我想要的手机,比如"华为手机""1万元以下",如果用MySQL实现的话可能会这样写:select * from phone where phone_brand like "%关键词%".这样做理论上是可以查到相关数据的,但是如果我这时候想换个说法,换成"1万元以下"和"华为手机",只要调换个顺序,Like关键词就匹配不到了.而且LIKe是全表扫描的操作,数据量大的情况下这是非常消耗性能的.这时候就需要用到ElasticSearch来解决

ElasticSearch和MySQL在工作中的应用场景:先保存一份数据到MySQL,再保存一份到ElasticSearch,在ES中搜索

为什么ElasticSearch这么厉害不能取代MySQL?
MySQL虽然在数据全文检索方面显得有些力不从心,但是因为它的事务功能特性,可以保证不会出现脏数据.而ES并不支持事务,所以不是很适合存储原始数据.所以在工作中都是两个一起使用,一方面利用MySQL保证原始数据的安全性,另一方面利用ElasticSearch来进行全文搜索.
 

Spring Boot使用ElasticSearch需要借助Spring Data Elasticsearch模块,该模块提供了一系列的API,方便我们对ElasticSearch进行操作。 以下是在Spring Boot使用ElasticSearch的简单步骤: 1.添加依赖 在pom.xml文件添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2.配置ElasticSearch 在application.properties文件添加以下配置: ``` spring.data.elasticsearch.cluster-nodes=localhost:9300 spring.data.elasticsearch.cluster-name=my-application ``` 3.创建实体类 在使用Spring Data Elasticsearch进行操作时,需要先定义实体类,该类需要使用@Document注解进行标注,同时需要使用@Id注解指定主键字段。 例如: ``` @Document(indexName = "my_index", type = "my_type") public class MyDocument { @Id private String id; private String name; private String description; // getter / setter } ``` 4.创建Repository 使用Spring Data Elasticsearch提供的ElasticsearchRepository接口,继承该接口并传入实体类和主键类型,即可直接使用CRUD操作。 例如: ``` public interface MyDocumentRepository extends ElasticsearchRepository<MyDocument, String> { } ``` 5.使用Repository进行操作 在需要对Elasticsearch进行操作的地方,使用@Autowired注解注入MyDocumentRepository即可。 例如: ``` @Autowired private MyDocumentRepository myDocumentRepository; public void test() { MyDocument myDocument = new MyDocument(); myDocument.setName("test"); myDocument.setDescription("test description"); myDocumentRepository.save(myDocument); } ``` 以上就是在Spring Boot使用ElasticSearch的简单步骤。需要注意的是,以上只是最基础的使用方法,实际使用还需要根据具体需求进行配置和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋力向前123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值