ElasticSearch学习随笔之SpringBoot Starter 操作ElasticSearch,创始人 Shay Banon(谢巴农)
本文主讲 SpringBoot Starter 操作ES。
文章目录
- 前言
- 一、加入Springboot Starter依赖
- 二、application.yml 配置 & 创建单元测试类
- 2.1 application.yml 配置
- 2.2 单元测试类
- 三、单元测试前奏
- 3.1 创建一个实体Bean(Tender.java)
- 3.2 添加xxxxRepository 查询接口
- 四 单元测试方法
- 4.1 新增
- 4.2 id获取
- 4.3 产品名称搜索
- 4.4 修改
- 4.5 删除
- 4.6 ElasticsearchRestTemplate 查询
- 总结
前言
本文主要针对 SpringBoot Starter 如何操作 ES 记录简单案例。
一、加入Springboot Starter依赖
话不多说,直接copy,后面要用 Junit Test 测试,加入测试包
二、application.yml 配置 & 创建单元测试类 2.1 application.yml 配置org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter-test
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;
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{ Page findByProductName(String productName, PageRequest pageRequest); }
四 单元测试方法 4.1 新增为什么我们集成了ES提供的 repositoty 接口就可以操作es, 因为 spirng 定义了CRUD 接口。
@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;
@Test
public void findByProductName(){
Page 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;
@Test
public void findByQuery(){
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("山东方中工程管理有限公司", "product_agency");
Query query = new NativeSearchQueryBuilder().withQuery(queryBuilder).build();
SearchHits 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 执行。
后期有时间持续更新。



