[solr1.3] Solr1.3的启动过程分析一
damoqingquan
2008-12-19
1. Solr1.3中使用初始化工具Initializer的实例来获得CoreContainer的对象。常规的步骤如下:
------------------------------------------- Initializer initializer=new Initializer(); //获得配置文件名,如果不调用该方法,将使用默认的solr.xml init.setSolrConfigFilename(config.getInitParameter("solrconfig-filename")); //设置如果启动出错是否停止 setAbortOnConfigurationError(boolean abortOnConfigurationError); CoreContainer cores=init.initialize(); 2.调用init.initialize()时都做了些什么事情? //使用下面语句获得主目录,例如:D:\search_engine\multicore/ String instanceDir = SolrResourceLoader.locateInstanceDir(); //获取主目录路径下的配置文件solr.xml,当为非多核的时候它是不存在的,所以下面就针对该文件是否存在出现了if-else分支。 File fconf = new File(instanceDir, solrConfigFilename == null? "solr.xml": solrConfigFilename); 2.1如果存在配置文件,通过下面的语句获得多核实例,也就是这两句代码这里,所有的核都已经创建了 cores = new CoreContainer(); cores.load(instanceDir, fconf); //接来的部分就是设置abortOnConfigurationError和solrConfigFilename连个属性而已。 2.2如果不存在配置文件,采用下面的方法创建一个SolrCoreContainer实例。 //这里仅仅是设置CoreContainer的load(SolrResourceLoader)属性,显然它是与主目录相关的了。 cores = new CoreContainer(new SolrResourceLoader(instanceDir)); //获取配置文件名,solrConfigFilename 为空则使用默认的文件名solrconfig.xml。 SolrConfig cfg = solrConfigFilename == null ? new SolrConfig() : new SolrConfig(solrConfigFilename); //获得CoreDescriptor实例,三个参数依次为核容器,名字,主目录 CoreDescriptor dcore = new CoreDescriptor(cores, "", "."); //创建一个SolrCore 对象,五个参数一次为 name, Dir, SolrConfig实例(代表配置文件),IndexSchema实例schema(代表域模式), CoreDescriptor(核描述器). SolrCore singlecore = new SolrCore(null, null, cfg, null, dcore); //上面很多地方使用了null,我们很容易想到内部使用了默认值 //下面一句很显然是将singlecore这里核添加到cores中去 cores.register("", singlecore, false); //这里是设置persistent属性 cores.setPersistent(false); //对于solrConfigFilename以及abortOnConfigurationError的设置就不用说了 //最后就是返回CoreContainer的实例了 cores.load(instanceDir, fconf);到底做了哪些事情呢? 敬请关注:http://www.lucas.gd.cn / 之Solr板块 ---------------------------------------- 原创文章:敬请著名出处http://www.lucas.gd.cn 。 作者:宋永维 email:lucas.song.cn@gmail.com |