SpringBoot+ElasticSearch构造项目及简单应用

一、ElasticSearch与SpringBoot版本对应:

Spring BootSpring Data ElasticsearchElasticsearch
2.4.x4.1.x7.9.x
2.5.x4.2.x7.12.x
2.6.x4.3.x7.15.x
2.7.x4.4.x7.17.x

        我选择了springboot2.7.14和ElasticSearch7.16.2,按照如下pom文件配置导入依赖。(自动导入Spring Data Elasticsearch包版本为4.4.14)

二、maven依赖导入

 <!--引入es相关依赖-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.16.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.16.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>jakarta.json</groupId>
            <artifactId>jakarta.json-api</artifactId>
            <version>2.0.1</version>
        </dependency>

注:如果你的es版本为7.16.2可将springboot版本更为2.7.14 ,确保下面两个配置均为2.7.14

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.7.14</spring-boot.version>
    </properties>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.7.14-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>

 这是我的相关包及版本,如果遇到无法自动导入的问题,可以手动引入这些包及版本

三、yml配置文件 

spring:
  elasticsearch:
    uris: http://ip:端口
#如果没有账号密码可不设置
    username: 
    password: 
    connection-timeout: 10s # 连接超时时间(默认1s)
    socket-timeout: 30s # 数据读取超时时间(默认30s)
log:
  level: info
  path: ./logs

四、构造对应ES索引实体类

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;

/**
 * @ClassName EsBaseEntity 
 * @Description
 * @Author ly
 * @Version 1.0
 * @Create 2024-08-28 15:31
 */
@Document(indexName = "esbaseenetity" ,shards = 3,replicas = 1,createIndex = true)
public class EsBaseEntity {
    @Id
    @Field(name="_id")
    private String id;
    @Field(name="FLAG" )
    private String flag;

    @Field(name = "NS_NO")
    private String nsNo;
    @Field(name = "TAG_NO")
    private String tagNo;
    @Field(name = "SIGN")
    private String sign;
    @Field(name="REQUIRE")
    private Long REQUIRE;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }

    public String getnsNo() {
        return nsNo;
    }

    public void setPcNo(String nsNo) {
        this.nsNo = nsNo;
    }

    public String getTagNo() {
        return tagNo;
    }

    public void setTaNo(String tagNo) {
        this.tagNo = tagNo;
    }

    public String getSign() {
        return sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }

    public Long getREQUIRE() {
        return REQUIRE;
    }

    public void setREQUIRE(Long REQUIRE) {
        this.REQUIRE = REQUIRE;
    }

}

确保每一个变量都能跟es索引(数据库表)的映射(字段)对上 。

注解说明:


@Document :
应用于类级别,表示该类是映射到数据库的候选对象。
indexName :存储此实体的索引名称,可包含 SpEL 模板表达式。
createIndex :标记在存储库引导中是否创建索引,默认值为 true 。
versionType :版本管理的配置,默认值为 EXTERNAL 。
@Id :
应用于字段级别,标记用于标识目的的字段。
@Transient :
应用于字段,默认情况下所有字段都映射到文档,该注释使此字段不被包含。
@PersistenceConstructor :
标记从数据库实例化对象时要使用的给定构造函数,参数按名称映射到检索到的文档中的键值。
@Field :
应用于字段级别,定义字段属性。
属性包括:
name :字段在 Elasticsearch 文档中的名称,未设置时使用 Java 字段名称。
type :字段类型,如多种类型可选。
format 和日期类型的 pattern :日期类型必须定义。
store :标记是否存储原始字段值,默认值为 false 。
analyzer 、 searchAnalyzer 、 normalizer :用于指定自定义分析和正规化。
@GeoPoint :
将字段标记为 geo_point 数据类型,若字段是 GeoPoint 类实例可省略。
@ValueConverter :
定义用于转换给定属性的类,仅转换带注释的属性。
@Setting :
定义不同的索引设置。
参数包括:
useServerConfiguration :不发送任何设置参数,由 Elasticsearch 服务器配置确定。
settingPath :指定义必须在类路径中解析的设置的 JSON 文件。
shards :要使用的分片数,默认为 1 。
replicas :副本数,默认为 1 。
refreshIntervall :默认为 1s 。
indexStoreType :默认为 fs 。

五、 ElasticsearchRepository操作接口(DAO)

import com.dytg.materialapi.entity.EsBaseEntity;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @ClassName EsService
 * @Description
 * @Author lyw
 * @Version 1.0
 * @Create 2024-08-28 15:48
 */

@Repository
public interface EsBaseEntityRepository extends ElasticsearchRepository<EsBaseEntity,String> {

    List<EsBaseEntity> findEsBaseEntityByFlagAndTagNoAndSign(String flag,String tagNo,String sign);

}

ElasticsearchRepository有一套标准的方法命名规范,符合规范的方法名在输入的时候就会有提示,比如findByXXX,这个XXX就是你要按某个关键字搜索,也就是你的哪个变量,如果在前面的实体类构造没问题,那么这边当你输入某个关键字开头的时候便会有提示,如下图

除了And,你还可以使用Or这些词进行关联搜索。

不必要在这里面声明存储、删除方法,因为在其父接口中有CrudRepository接口,含存储、删除等方法。

六、使用demo

#
    @Autowired
    private EsBaseEntityRepository esBaseEntityRepository;



List<EsBaseEntity> EsBaseEntitysByFlagAndTaNoAndSign = esBaseEntityRepository.findEsBaseEntityByFlagAndTagNoAndSign(flag, tagNo, sign);

                    EsBaseEntity esBaseEntity = new EsBaseEntity();
                    esBaseEntity.setFlag("测试啊");
                    esBaseEntity.setTagNo("测试测试");
                    esBaseEntity.setSign("测试");
                    esBaseEntity.setnsNo("测试测试");
                    esBaseEntity.setId("KNrMnJEBHzabIKW7VGZR");
                    esBaseEntityRepository.delete(esBaseEntity);
                    esBaseEntityRepository.save(esBaseEntity);
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java框架,用于构建独立的、可扩展的、基于微服务的应用程序。它提供了一种快速、简单的方式来构建和部署应用程序,也简化了与各种数据库、消息队列和其他外部系统进行集成的过程。同时,Spring Boot提供了一套强大的开发工具和功能,方便开发人员进行开发、测试和部署。 Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,它被广泛应用于构建实时搜索、数据分析和数据存储的解决方案。Elasticsearch具有高性能、可扩展、可靠和易于使用的特点,可以处理大规模的数据,并提供全文搜索、聚合分析和实时监控等功能。 Oracle是一种关系型数据库管理系统(RDBMS),它是全球领先的企业级数据库解决方案之一。Oracle提供了高度可靠和安全的数据管理功能,同时支持事务处理、并发性控制、数据恢复和备份等重要特性。它还提供了丰富的管理和开发工具,方便开发人员进行数据库的设计、开发和管理。 在使用Spring Boot开发应用程序时,可以通过集成Elasticsearch和Oracle来满足不同的需求。使用Elasticsearch,可以轻松地实现全文搜索、聚合分析和实时监控等功能。而Oracle数据库可以用于存储结构化数据,并提供事务处理、数据完整性和安全性等特性。通过使用这两个技术,可以构建出高效、可靠和安全的应用程序,满足不同场景下的各种需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值