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 检索

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 Spring Boot Starter Data 整合 Elasticsearch,可以按照以下步骤进行: 1. 在 pom.xml 文件中添加 Elasticsearch 的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 在 application.properties 文件中配置 Elasticsearch 的连接信息: ```properties spring.data.elasticsearch.cluster-nodes=localhost:9300 spring.data.elasticsearch.cluster-name=my-application ``` 其中,cluster-nodes 是 Elasticsearch 集群节点的地址,cluster-name 是集群名称。 3. 创建一个 ElasticsearchRepository 接口来定义 Elasticsearch操作: ```java public interface BookRepository extends ElasticsearchRepository<Book, String> { } ``` 其中,Book 是实体类,String 是实体类主键的数据类型。 4. 在需要使用 Elasticsearch 的地方注入 ElasticsearchRepository 接口,并使用它进行数据操作: ```java @Autowired private BookRepository bookRepository; public void saveBook(Book book) { bookRepository.save(book); } public List<Book> findBooksByAuthor(String author) { return bookRepository.findByAuthor(author); } ``` 这里的 save 方法是保存数据,findByAuthor 方法是按照作者查询数据。 以上就是 Spring Boot Starter Data 整合 Elasticsearch 的基本步骤。需要注意的是,这里使用的是 ElasticsearchRepository 接口,它提供了一些常用的操作方法,如果需要更多的操作,可以使用 ElasticsearchTemplate 类来进行操作

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值