MySql数据传到ElasticSearch

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());
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神明画押眷我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值