ES学习记录(二)

ES学习记录(二)

学习目标

  • 基础目标
    • 利用spring-boot-starter-data-elasticsearch,集成Elasticsearch
    • 利用spring-boot-starter-data-elasticsearch提供的类,完成对索引和文档的curd
  • 进阶目标

一、Springboot与Elasticsearch

Spring boot 是java使用最广泛的框架,集成了很多开发常用到的组件,其中就包括ES

在java代码中集成ES其实也可以不依赖Spring boot

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>${esClientVersion}</version>

#或者使用下面的依赖

<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${esHightLevelClientVersion}</version>
</dependency>

但是今天介绍的是Spring-data中集成的ES

二、Spring 集成ES

1.导入依赖

这里不需要标明version,因为spring boot会帮匹配当前spring boot框架对应的版本

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
      </dependency>

2.添加配置类

public class MyConfig extends ElasticsearchConfiguration {

    @Value("${elasticsearch.uris:localhost}")
    private String host;
    @Value("${elasticsearch.port:9200}")
    private String port;

    @Override
    public ClientConfiguration clientConfiguration() {

        log.info("imperative client....{}:{}",host,port);
        return ClientConfiguration.builder()
                .connectedTo(host+":"+port)
                .build();
    }

}

hostport 需要根据自己的yml文件和es的配置文件修改

3.进行curd

新建ES entity

@Document(indexName = "test_es_index")
@Builder
@Data
public class TestESEntity {

    @Id
    private String id;

    @Field(type = FieldType.Keyword)
    private String testKeyword;

    @Field(type = FieldType.Text)
    private String testText;
}

@Document(indexName = “test_es_index”) 代表该实体存储在 test_es_index 索引中
@Field(type = FieldType.Text) 代表该字段类型是text

更多注解请查阅官方文档

新建Repository

public interface ESRepository extends ElasticsearchRepository<TestESEntity, String> {

}

跟jpa类似,es的curd操作可以直接使用 ElasticsearchRepository 中封装好的方法,对于复杂查询可以使用 @Query 注解实现,但是也有另外的方法

4.Query methods

对于条件查询,可以手动写es查询的body,结合 @Query实现条件查询
也可以跟jpa类似,通过解析方法名获得查询结果
Spring官方文档QueryMethod介绍

5.响应式与及时式

Elasticsearch Clients 中介绍了两种Rest Client

  • Imperative Rest Client
  • Reactive Rest Client

从使用上看,二者并没有区别,取决于你是否采用响应式编程

题外:及时式于响应式

区分及时 or 响应,跟线程数量其实没有关系,举个例子,在单线程条件下,我先给A server发送请求,然后继续完成其他业务,等A server有返回了,我再继续进行下面的业务,这也是响应式

所以,简单地区分是否为响应式,要看是否为信息驱动去执行某种动作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值