ElasticSearch学习随笔之SpringBoot Starter 操作

ElasticSearch

1、ElasticSearch学习随笔之基础介绍
2、ElasticSearch学习随笔之简单操作
3、ElasticSearch学习随笔之java api 操作
4、ElasticSearch学习随笔之SpringBoot Starter 操作
5、ElasticSearch学习随笔之嵌套操作
6、ElasticSearch学习随笔之分词算法
7、ElasticSearch学习随笔之高级检索
8、ELK技术栈介绍
9、Logstash部署与使用
10、ElasticSearch 7.x 版本使用 BulkProcessor 实现批量添加数据
11、ElasticSearch 8.x 弃用了 High Level REST Client,移除了 Java Transport Client,推荐使用 Elasticsearch Java API
12、ElasticSearch 8.x 使用 snapshot(快照)进行数据迁移
13、ElasticSearch 8.x 版本如何使用 SearchRequestBuilder 检索
14、ElasticSearch 8.x 使用 High Level Client 以 HTTPS 方式链接,SSL 证书、主机名验证器 各是什么,如何忽略
15、ElasticSearch 8.x 创建父子文档,用Join类型字段以及用has_child、has_parent 检索
16、ElasticSearch如何提高写入效率【面试题,面道既学到】

ElasticSearch学习随笔之SpringBoot Starter 操作ElasticSearch,创始人 Shay Banon(谢巴农)
本文主讲 SpringBoot Starter 操作ES。



前言

本文主要针对 SpringBoot Starter 如何操作 ES 记录简单案例。


一、加入Springboot Starter依赖

话不多说,直接copy,后面要用 Junit Test 测试,加入测试包

<!--整合 ES-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

二、application.yml 配置 & 创建单元测试类

2.1 application.yml 配置

server:
  port: 8001
spring:
  application:
    name: xxxx-server #随便写个名字
  elasticsearch: #以下配置 主要用于 ElasticsearchRepository (两种操作方式,方式一配置)
    rest:
      uris: http://localhost:9200 #连接地址
  data:   #以下配置主要用于 ElasticsearchRestTemplate (两种操作方式,方式二配置)
    elasticsearch:
      repositories:
        enabled: true
      client:
        reactive:
          endpoints: localhost:9200

2.2 单元测试类

package com.wesh.es;

import com.wesh.home.HomeApplication;
import com.wesh.home.dao.es.TenderTestRepository;
import com.wesh.home.model.Tender;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

}

三、单元测试前奏

3.1 创建一个实体Bean(Tender.java)

package com.wesh.home.model;

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 = "tender_test3")
public class Tender {

    @Id
    private String id;
    @Field(name = "product_agency", type = FieldType.Keyword)
    private String productAgency;
    @Field(name = "notice_type_id", type = FieldType.Keyword)
    private String noticeTypeId;
    @Field(name = "product_name", type = FieldType.Keyword)
    private String productName;
    @Field(name = "notice_type", type = FieldType.Keyword)
    private String noticeType;
	
	/*get set 方法省略*/

3.2 添加xxxxRepository 查询接口

我们只需要定义接口即可进行相关的 ES 简单操作,不过要集成 Spring Data 提供的接口 ElasticsearchRepository。
Spring Data 提供的 接口中,按照 我们定义的方法名称 进行 ES 查询操作。具体规则可查阅 Spring官网总结方法命名规则

package com.wesh.home.dao.es;

import com.wesh.home.model.Tender;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TenderTestRepository extends ElasticsearchRepository<Tender, String> {

    /**
     * 根据 productName 查询,根据 方法 名称查询
     * @param productName
     * @param pageRequest
     * @return
     */
    Page<Tender> findByProductName(String productName, PageRequest pageRequest);
}

为什么我们集成了ES提供的 repositoty 接口就可以操作es, 因为 spirng 定义了CRUD 接口。
Spring定义了CRUD接口和分页排序操作接口

四 单元测试方法

4.1 新增

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;
    
    @Test
    public void save(){
        Tender tender = new Tender();
        tender.setNoticeType("招标广告");
        tender.setNoticeTypeId("12");
        tender.setProductName("血培养仪");
        tender.setProductAgency("山东方中工程管理有限公司");
        tenderTestRepository.save(tender);
    }
}

4.2 id获取

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

    @Test
    public void get(){
        Tender tender = tenderTestRepository.findById("kmfaxoABYWTnJb2BeotB").get();
        System.out.println(tender);
    }
}

4.3 产品名称搜索

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

	/**
     * 这里调用的就是 根据 productName 字段查询,spring data 提供的接口会根据名称组装查询
     */
    @Test
    public void findByProductName(){
        Page<Tender> tenders = tenderTestRepository.findByProductName("血培养仪", PageRequest.of(0,10));
        tenders.forEach(tender -> System.out.println(tender));
    }
}

4.4 修改

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

    @Test
    public void update(){
        Tender tender = tenderTestRepository.findById("kmfaxoABYWTnJb2BeotB").get();
        tender.setProductAgency("微生物鉴定药敏鉴定器");
        tender.setProductName("鉴定药敏鉴定器");
        tenderTestRepository.save(tender);
    }
}

4.5 删除

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

    @Test
    public void delete(){
        Tender tender = tenderTestRepository.findById("kmfaxoABYWTnJb2BeotB").get();
        tenderTestRepository.delete(tender);
    }
}

4.6 ElasticsearchRestTemplate 查询

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Autowired
    private ElasticsearchRestTemplate esRestTemplate;

    /**
     * 用 restTemplate操作
     */
    @Test
    public void findByQuery(){
        QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("山东方中工程管理有限公司", "product_agency");
        Query query = new NativeSearchQueryBuilder().withQuery(queryBuilder).build();
        SearchHits<Tender> tenderSearchHits = esRestTemplate.search(query, Tender.class, IndexCoordinates.of("tender_test3"));
        tenderSearchHits.get().forEach(tenderSearchHit -> {
            Tender content = tenderSearchHit.getContent();
            System.out.println(content);
        });
    }
}

总结

以上是Spring Data 提供的接口对 ES 的增删改查的简单案例,方便公司里面临时有需要对ES操作大量数据是,可以直接copy 执行。
后期有时间持续更新。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值