solr dataimport 数据导入源码分析(六)

DocBuilder类的简要代码如下,通过传入context参数到EntityProcessorWrapper类的构造函数,然后执行EntityProcessorWrapper的init()方法初始化数据源;

 然后调用EntityProcessorWrapper的相关方法获取数据(全部导入或增量导入数据)

public  class DocBuilder {
  
    private  void doFullDump() {
     
       buildDocument(getVariableResolver(),  nullnull, root,  truenull);
       
   }
   
   
    private  void doDelta() {
   
       Set<Map<String, Object>> deletedKeys =  new HashSet<Map<String, Object>>();
       
       Set<Map<String, Object>> allPks = collectDelta(root, resolver, deletedKeys);    
   
       buildDocument(vri,  null, map, root,  truenull);
       
   }
   
  
    private  void buildDocument(VariableResolverImpl vr, DocWrapper doc, Map<String, Object> pk, DataConfig.Entity entity,  boolean isRoot, ContextImpl parentCtx)     {
     
       buildDocument(vr, doc, pk, entity, isRoot, parentCtx, entitiesToDestroy);
    
   }
   
   
    private  void buildDocument(VariableResolverImpl vr, DocWrapper doc, Map<String, Object> pk, DataConfig.Entity entity,  boolean isRoot, ContextImpl parentCtx, List<EntityProcessorWrapper> entitiesToDestroy)                            {
    
      EntityProcessorWrapper entityProcessor = getEntityProcessor(entity);
   
     ContextImpl ctx =  new ContextImpl(entity, vr,  null,
             pk ==  null ? Context.FULL_DUMP : Context.DELTA_DUMP,
             session, parentCtx,  this);
      entityProcessor.init(ctx);
     
       // Map<String, Object> arow = entityProcessor.nextRow();
      
    
// 其他代码略
     
   }
   
  
    private EntityProcessorWrapper getEntityProcessor(DataConfig.Entity entity) {
     
      EntityProcessor entityProcessor =   new  SqlEntityProcessor();
    
      return  entity.processor =  new  EntityProcessorWrapper(entityProcessor,  this );
   }
   
   
   DataImporter dataImporter;
   
   
    public  static  final String LAST_INDEX_TIME = "last_index_time";
  
    public  static  final String INDEX_START_TIME = "index_start_time";
   
   
    public DocBuilder(DataImporter dataImporter, SolrWriter solrWriter, DIHPropertiesWriter propWriter, DataImporter.RequestParams reqParams) {
     
      this.dataImporter = dataImporter;
    
   }
   
  
    public  void execute() {      
          doDelta();            
          doFullDump();            
   }
   
   
    public Set<Map<String, Object>> collectDelta(DataConfig.Entity entity, VariableResolverImpl resolver, Set<Map<String, Object>> deletedRows)                                              {
      // someone called abort    
   
     EntityProcessor entityProcessor = getEntityProcessor(entity);
     ContextImpl context1 =  new ContextImpl(entity, resolver,  null, Context.FIND_DELTA, session,  nullthis);
     entityProcessor.init(context1);
     
     Set<Map<String, Object>> myModifiedPks =  new HashSet<Map<String, Object>>();
     
      // Map<String, Object> row = entityProcessor.nextModifiedRowKey(); 
     
      return myModifiedPks;
       
   }

}

相关类图如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值