pom.xml依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--es依赖-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
application.yaml文件配置
elasticsearch:
host: 127.0.0.1
port: 9200
spring:
datasource:
url: jdbc:mysql:///es?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
mybatis:
type-aliases-package: com.atguigu.pojo
mapper-locations: classpath:mapper/*Dao.xml
goodDao.xml文件配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.dao.GoodsDao">
<!--List<Goods> fineAll();-->
<select id="fineAll" resultType="goods">
select
id,
title,
price,
stock,
saleNum,
createTime,
categoryName,
brandName,
spec as specString
from goods
</select>
启动类配置
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
pojo设置
@Data
public class Goods {
private int id;
private String title;
private double price;
private int stock;
private int saleNum;
private Date createTime;
private String categoryName;
private String brandName;
private Map spec;
//该注解可以使该字段不会被序列化
@JSONField(serialize = false)
private String specString;
}
dao层的类设置
@Mapper
@Component
public interface GoodsDao {
List<Goods> fineAll();
}
客户端配置文件类
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
@Data
public class ElasticSearchConfig {
private String host;
private Integer port;
//创建客户端
@Bean
public RestHighLevelClient client(){
return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,"http")));
}
}
测试类的设置
@SpringBootTest
@RunWith(SpringRunner.class)
public class EsTest {
@Autowired
private GoodsDao goodsDao;
//导入客户端
@Autowired
private RestHighLevelClient client;
/**
* 将数据库的数据查询放到es数据库中
* @throws Exception
*/
@Test
public void test1()throws Exception{
List<Goods> goods = goodsDao.fineAll();
//将数据返回来的数据进行绑定一起发送
BulkRequest bulkRequest = new BulkRequest();
for (Goods good : goods) {
//将javabean的spec与specString进行交换数据
String specString = good.getSpecString();
Map map = JSON.parseObject(specString, Map.class);
good.setSpec(map);
//将good转成json格式
String string = JSON.toJSONString(good);
//创建添加请求
IndexRequest indexRequest = new IndexRequest("goods").id(good.getId() + "").source(string, XContentType.JSON);
bulkRequest.add(indexRequest);
}
System.out.println(bulkRequest);
//捆绑提交
BulkResponse bulk1 = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk1.status());
}
/**
* 将es数据查询出来
*/
@Test
public void test2()throws Exception{
//创建查询请求
SearchRequest searchRequest = new SearchRequest("goods");
//创建查询资源构造条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//资源请求条件设置
//创建查询所有文档对象,并添加
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
searchSourceBuilder.query(matchAllQueryBuilder);
//添加分页语句,当前页以及每页条数
searchSourceBuilder.size(10);
searchSourceBuilder.from(1);
//将资源构造条件对象添加到查询请求中
searchRequest.source(searchSourceBuilder);
//发送查询请求
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
//接收数据
// System.out.println(search);
//遍历我们自己想要的数据
SearchHits hits = search.getHits();
//获取总数
TotalHits totalHits = hits.getTotalHits();
System.out.println("totalHits = " + totalHits);
SearchHit[] hits1 = hits.getHits();
//创建一个map集合存返回来的数据
ArrayList<Goods> list = new ArrayList<>();
for (SearchHit documentFields : hits1) {
Integer id = Integer.parseInt(documentFields.getId());
String sourceAsString = documentFields.getSourceAsString();
//将_source字段的资源转成Goods
Goods goods = JSON.parseObject(sourceAsString, Goods.class);
goods.setId(id);
list.add(goods);
}
for (Goods goods : list) {
System.out.println(goods);
}
}
}