46分布式电商项目 - 批量导入商品数据到solr索引库

简介: 46分布式电商项目 - 批量导入商品数据到solr索引库

代码已上传至GitHub

地址:https://github.com/ylw-github/pingyougou.git

版本:279050cd76aa2ba9b6e45201b12dce926e2da82f

具体的工程搭建不讲解,工程截图如下:

SolrUtils完整工具类:

package com.pyg.solr.utils;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.pyg.mapper.TbItemMapper;
import com.pyg.pojo.TbItem;
import com.pyg.pojo.TbItemExample;
import com.pyg.pojo.TbItemExample.Criteria;
@Component
public class SolrUtils {
  // 注入商品mapper接口代理对象
  @Autowired
  private TbItemMapper itemMapper;
  //注入solr模版对象
  @Autowired
  private SolrTemplate solrTemplate;
  /**
   * 需求:查询数据库数据,把数据导入索引库
   * 
   * @param args
   */
  public void importData() {
    // 创建example对象
    TbItemExample example = new TbItemExample();
    // 设置参数:必须是已审核商品
    Criteria createCriteria = example.createCriteria();
    // 设置查询参数
    createCriteria.andStatusEqualTo("1");
    // 查询数据库
    List<TbItem> list = itemMapper.selectByExample(example);
    //导入规格数据
    //循环集合,获取规格
    for (TbItem tbItem : list) {
      String spec = tbItem.getSpec();
      //转换成map对象
      Map<String, String> specMap = (Map<String, String>) JSON.parse(spec);
      //把值添加动态域
      tbItem.setSpecMap(specMap);
    }
    //添加索引库
    solrTemplate.saveBeans(list);
    //提交
    solrTemplate.commit();
  }
  // java -jar xx.jar
  public static void main(String[] args) {
    // 加载spring配置文件
    ApplicationContext app = new ClassPathXmlApplicationContext(
        "classpath*:spring/*.xml");
    //获取SolrUtils对象
    SolrUtils solrUtils = app.getBean(SolrUtils.class);
    //调用导入索引库方法
    solrUtils.importData();
  }
}

2)修改 TbItem.java ,添加属性

package com.pyg.pojo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
import javax.xml.ws.FaultAction;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.solr.core.mapping.Dynamic;
public class TbItem implements Serializable{
    /**
   * 
   */
  private static final long serialVersionUID = -4730788370859047528L;
  @Field
  private Long id;
  @Field("item_title")
    private String title;
    private String sellPoint;
    @Field("item_price")
    private BigDecimal price;
    private Integer stockCount;
    private Integer num;
    private String barcode;
    @Field("item_image")
    private String image;
    @Field("item_goodsid")
    private Long goodsId;
    @Field("item_category")
    private String category;
    @Field("item_brand")
    private String brand;
    private String spec;
    @Field("item_seller")
    private String seller;
    //定义一个map,用来封装动态域: 规格数据
    @Dynamic
    @Field("item_spec_*")
    private Map<String, String> specMap;
    getter ...
    setter ...

运行SolrUtils工具类,然后登录solr 的web查看

数据导入成功

目录
打赏
0
0
0
0
242
分享
相关文章
数据分布式存储:在海量数据面前,我们如何站稳脚跟?
数据分布式存储:在海量数据面前,我们如何站稳脚跟?
52 1
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。
376 2
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
60 18
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
45 16
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
81 7
|
4月前
|
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
88 5
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
127 2

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等