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查看

数据导入成功

目录
相关文章
|
1月前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
2月前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
3月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
97 6
面试官:项目中如何实现分布式锁?
|
4月前
|
SQL 分布式计算 MaxCompute
一种基于ODPS SQL的全局字典索引分布式计算思路
本文提供一种能充分利用分布式计算资源来计算全局字典索引的方法,以解决在大数据量下使用上诉方式导致所有数据被分发到单个reducer进行单机排序带来的性能瓶颈。
|
4月前
|
数据采集 分布式计算 并行计算
Dask与Pandas:无缝迁移至分布式数据框架
【8月更文第29天】Pandas 是 Python 社区中最受欢迎的数据分析库之一,它提供了高效且易于使用的数据结构,如 DataFrame 和 Series,以及大量的数据分析功能。然而,随着数据集规模的增大,单机上的 Pandas 开始显现出性能瓶颈。这时,Dask 就成为了一个很好的解决方案,它能够利用多核 CPU 和多台机器进行分布式计算,从而有效地处理大规模数据集。
238 1
|
4月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
97 5
|
4月前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
4月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
4月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
77 0
|
4月前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
74 0