springboot的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!--引入es的坐标-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.10.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.10.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.10.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
整个项目目录
注意:配置了mybatis-plus就不要再新建一个mybatis-plus.xml放在mapper目录下!!!直接在application.yml里配置mybatis即可,不同项目引起的错误一致但是可能内涵不一致
在resources里面自动生成的代码:mapper包下的ItemMapper要删除掉
配置文件ESconfig
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
@Data
public class ESconfig {
private String host;
private String port;
@Bean
public RestHighLevelClient restHighLevelClient(){
return new RestHighLevelClient(RestClient.builder(
new HttpHost(host, Integer.parseInt(port),"http")
));
}
}
mapper接口
/**
* @author Administrator
* @description 针对表【tb_item(商品表)】的数据库操作Mapper
* @createDate 2022-04-12 22:57:32
* @Entity com.offcn.pojo.Item
*/
@Mapper
public interface ItemMapper extends BaseMapper<Item> {
}
实体类Item
package com.offcn.pojo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
* 商品表
* @TableName tb_item
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Item implements Serializable {
/**
* 商品id,同时也是商品编号
*/
private Long id;
/**
* 商品标题
*/
private String title;
/**
* 商品卖点
*/
@TableField(exist = false)
private String sellPoint;
/**
* 商品价格,单位为:元
*/
private BigDecimal price;
/**
*
*/
@TableField("stock_count")
private Integer stock;
/**
* 库存数量
*/
@TableField("num")
private Integer saleNum;
/**
* 商品条形码
*/
@TableField(exist = false)
private String barcode;
/**
* 商品图片
*/
@TableField(exist = false)
private String image;
/**
* 所属类目,叶子类目
*/
@TableField(exist = false)
private Long categoryid;
/**
* 商品状态,1-正常,2-下架,3-删除
*/
@TableField(exist = false)
private String status;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
@TableField(exist = false)
private Date updateTime;
/**
*
*/
@TableField(exist = false)
private String itemSn;
/**
*
*/
@TableField(exist = false)
private BigDecimal costPirce;
/**
*
*/
@TableField(exist = false)
private BigDecimal marketPrice;
/**
* 0-不是默认 1-是默认
*/
@TableField(exist = false)
private String isDefault;
/**
*
*/
@TableField(exist = false)
private Long goodsId;
/**
*
*/
@TableField(exist = false)
private String sellerId;
/**
*
*/
@TableField(exist = false)
private String cartThumbnail;
/**
*
*/
@TableField("category")
private String categoryName;
/**
*
*/
@TableField("brand")
private String brandName;
/**
*
*/
@TableField("spec")
private String specStr;
//从MySQL数据库里面查出来的是json串类型
//在es里面是 object对象类型
//和mysql不对应,要排除
//和es匹配
@TableField(exist = false)
private Map spec;
/**
*
*/
@TableField(exist = false)
private String seller;
}
启动类
@SpringBootApplication
@MapperScan(basePackages = "com.offcn.mapper")
public class SpringbootEs2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootEs2Application.class, args);
}
}
application.yml
elasticsearch:
host: 192.168.249.70
port: 9200
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/dongyimai?serverTimezone=UTC
username: root
password: root
mybatis-plus:
global-config:
db-config:
table-prefix: tb_
id-type: auto
测试类
@SpringBootTest
class SpringbootEs2ApplicationTests {
@Autowired
private RestHighLevelClient client;
@Autowired
private ItemMapper itemMapper;
@Test
void contextLoads() {
List<Item> items = itemMapper.selectList(null);
System.out.println(items.size());
}
@Test
void addBulk() throws IOException {
//1.查询所有数据,mysql
List<Item> items = itemMapper.selectList(null);
//2.bulk导入
BulkRequest bulkRequest = new BulkRequest();
//2.1 循环goodsList,创建IndexRequest添加数据
for (Item item : items) {
//2.2 设置spec规格信息 Map的数据 specStr:{}
String specStr = item.getSpecStr();
//将json格式字符串转为Map集合
Map map = JSON.parseObject(specStr, Map.class);
//设置spec map
item.setSpec(map);
//将goods对象转换为json字符串
String data = JSON.toJSONString(item);
//将商品的id作为es里面的编号id
//索引库里面的id是字符串
//mysql里面的id是int
//source后面跟的是数据,可以是json串,可以map集合
IndexRequest indexRequest = new IndexRequest("goods");
//有json数据还得指定对应的类型
indexRequest.id(item.getId() + "").source(data,XContentType.JSON);
bulkRequest.add(indexRequest);
}
BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(response.status());
}
}