zoukankan      html  css  js  c++  java
  • 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;
           
       }

    }

    相关类图如下

     

  • 相关阅读:
    ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
    ASP.NET Core 中间件详解及项目实战
    开源项目1:某大学校友管理系统
    web安全浅析
    p2p网贷平台设计简析
    一些常见的并且比较难解决的设计问题
    CentOS 新增swap交换空间
    策略模式
    Centos6.4 本地yum源配置
    Linux(CentOs6.4)安装Git
  • 原文地址:https://www.cnblogs.com/chenying99/p/2678096.html
Copyright © 2011-2022 走看看