`
damoqingquan
  • 浏览: 48473 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Solr1.3的启动过程分析二

阅读更多

这里讲讲CoreContainer的load(String dir, File configFile )方法所做的事情,也就是如何根据主目录下的solr.xml配置文件的数据以及主目录来对每个ScoreCore进行初始设置的,这些工作属于服务器启 动的一部分。
     先来说说参数吧,配置文件对象直接赋予CoreContainer的configFile 属性,而主目录路径dir则是用来构建一个Solr资源加载器(SolrResourceLoader),将该加载器作为当前CoreContainer 的loader属性。代码如下。
    ///////////
    this.configFile = configFile;
    this.loader = new SolrResourceLoader(dir);
    //////////

    SolrResourceLoader是管理当前目录下面的资源的类,这些资源包括目录名称,索引数据目录,类等等。
   
    下面通过这个语句获得配置文件的内容流。
     //////
     FileInputStream cfgis = new FileInputStream(configFile);
     //////
  
     获得流以后,所做的工作概括来说就是读取配置文件中的类容并设置相关的属性,我们来具体看一看。
    
     Config cfg = new Config(loader, null, cfgis, null);这句代码,我们知道返回一个Confige对象,该对象的本质是什么?构造函数的参数又是什么意思呢?
    先看看构造函数的参数说明:
    //////
   

/* Font definitions */html { font-family: 'Tahoma',sans-serif; font-size: 8pt; font-style: normal; font-weight: normal; }body, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt { font-size: 1em; }pre { font-family: monospace; }h1 { font-size: 1.8em; } h2 { font-size: 1.2em; }h3 { font-size: 1.1em; }/* Margins */h1 { margin-top: 0.3em; margin-bottom: 0.04em } h2 { margin-top: 2em; margin-bottom: 0.25em }h3 { margin-top: 1.7em; margin-bottom: 0.25em }h4 { margin-top: 2em; margin-bottom: 0.3em }h5 { margin-top: 0px; margin-bottom: 0px }p { margin-top: 1em; margin-bottom: 1em }pre { margin-left: 0.6em }ul { margin-top: 0px; margin-bottom: 1em; }li { margin-top: 0px; margin-bottom: 0px; } li p { margin-top: 0px; margin-bottom: 0px; } ol { margin-top: 0px; margin-bottom: 1em; }dl { margin-top: 0px; margin-bottom: 1em; }dt { margin-top: 0px; margin-bottom: 0px; font-weight: bold; }dd { margin-top: 0px; margin-bottom: 0px; }/* Styles and colors */a:link { color: #0000FF; }a:hover { color: #000080; }a:visited { text-decoration: underline; }h4 { font-style: italic; }strong { font-weight: bold; }em { font-style: italic; }var { font-style: italic; }th { font-weight: bold; }

    Builds a config:

    Note that the 'name' parameter is used to obtain a valid input stream if no valid one is provided through 'is'. If no valid stream is provided, a valid      SolrResourceLoader instance should be provided through 'loader' so the resource can be opened (@see SolrResourceLoader#openResource); if no SolrResourceLoader instance is provided, a default one will be created.

 

    Consider passing a non-null 'name' parameter in all use-cases since it is used for logging & exception reporting.

 

    Parameters:
loader the resource loader used to obtain an input stream if 'is' is null
name the resource name used if the input stream 'is' is null
is the resource as a stream
prefix an optional prefix that will be preprended to all non-absolute xpath expressions
    Throws:
javax.xml.parsers.ParserConfigurationException
java.io.IOException
org.xml.sax.SAXException
    public Config(SolrResourceLoader loader, String name, InputStream is, String prefix) ......
  //////
    这段话的意思是,name参数存在的意义是在is不能提供正确的输入流的情况下发挥作用以获得正确的流。is为空,那么将一个 SolrResourceLoader的实例通过loader来传递以确保能打开资源,如果没有提供一个 SolrResourceLoader的实例,那么会建立一个默认的。name参数最好为非空,以便记录日志。成功加载配置文件solr.xml之后,下面的代码不过是读取配置文件中的内容来设置一些属性而已。

 

    //////

      persistent = cfg.getBool( "solr/@persistent", false );
      libDir     = cfg.get(     "solr/@sharedLib", null);
      adminPath  = cfg.get(     "solr/cores/@adminPath", null );
      managementPath  = cfg.get("solr/cores/@managementPath", null );

    //////

     通常上面几个属性的值如下:

    persistent:false
    libDirnull
    adminPath:/admin/cores
    managementPathnull

    下面这段代码是看solr.xml配置文件中是否指定了一个lib目录,如果有则加载之。

    //////

    if (libDir != null) {
        // relative dir to conf
        File f = new File(dir, libDir);
        libDir = f.getPath();
        log.info( "loading shared library: "+f.getAbsolutePath() );
        libLoader = SolrResourceLoader.createClassLoader(f, null);
      }

    //////

    下面的代码返回管理处理器

    //////

 if( adminPath != null ) {
        coreAdminHandler = this.createMultiCoreHandler();
      }
    //////

    下面的代码读取solr.xml文件中solr节点,如果有多个只返回第一个,其它的都忽略掉。

    //////

   containerProperties = readProperties(cfg, ((NodeList) cfg.evaluate("solr", XPathConstants.NODESET)).item(0));
    //////

   下面的代码获得xpath为solr/cores/core的节点,这里可能有多个节点,因此是一个NodeList类型。

    //////

 NodeList nodes = (NodeList)cfg.evaluate("solr/cores/core", XPathConstants.NODESET);

    //////

    下面的代码就是通过一个for循环来处理nodes中的信息,根据这里的信息来建立每个核(对应每个库),例如如果我的solr.xml中有多个core节点,并且主目录下有多个与这些节点对应的库的话,那么这里就是针对每一个库的初始化处理。

   具体细节请看Solr1.3的启动过程分析三

敬请关注:http://www.lucas.gd.cn / 之Solr板块
----------------------------------------
原创文章:敬请著名出处http://www.lucas.gd.cn
作者:宋永维
email:lucas.song.cn@gmail.com

分享到:
评论

相关推荐

    Lucidworks Solr 参考指南 1.3

    - 字段分析是 Solr 处理文档的核心过程之一。通过对文本进行分词、标准化处理等方式,确保文档可以被有效索引。 **4.4 Solr 字段类型** - **字段类型定义**: 在 schema.xml 文件中定义字段类型及其相应的配置参数...

    Solr3.5开发应用指导

    - **1.3.1 索引**:在索引过程中,Solr接收文档并对其进行分析,然后将分析后的结果存储到索引中。这一步骤主要包括文档解析、字段提取、分析(分词、去除停用词等)和存储。 - **1.3.2 搜索**:用户通过发送查询...

    银河麒麟服务器操作系统-Solr适配手册.pdf

    - 可定制:Solr允许用户自定义字段类型、分析器和查询解析器,满足多样化需求。 1.4 SOLR架构及原理 1.5.1 全文检索 Solr通过构建倒排索引,将文档中的词汇映射到包含这些词汇的文档列表,从而实现快速查找匹配的...

    Hbase同步数据到Solr的方案

    在CDH 5.0.2版本中,提供了HBase、Solr和HBase Indexer的集成包,包括Hbase-0.96.1.1-cdh5.0.2.tar.gz、Hbase-solr-1.3-cdh5.0.2.tar.gz和Solr-4.4.0-cdh5.0.2.tar.gz。 HBase Indexer的工作原理基于HBase的...

    solr 企业搜索引擎教程

    - **数据导入**:从1.3版本开始,Solr支持从数据库(JDBC)、RSS提要、Web页面和文件中导入数据。但不直接支持从MS Office、PDF等专有格式的二进制文件中提取内容。 #### 2. Solr 的主要组件与特性 - **Solr使用...

    开源企业搜索引擎SOLR的应用教程

    #### 二、Solr的特性 ##### 1. Solr使用Lucene并且进行了扩展 - **基础**: Solr的基础架构建立在Apache Lucene之上,Lucene是Java语言编写的高性能文本搜索引擎库。 - **扩展**: Solr对Lucene进行了扩展,添加了更...

    开源企业搜索引擎SOLR的 应用教程

    #### 二、Solr的安装与配置 **2.1 在Tomcat下Solr安装** - **2.1.1 安装准备** 确保已经安装了Java环境,并且Tomcat版本兼容。 - **2.1.2 安装过程** 1. 下载Solr压缩包。 2. 解压Solr到Tomcat的webapps目录下...

    Nutch 1.3 学习笔记

    2. **生成新的抓取URLs**:执行`bin/nutch generate crawldb segments_dir [-force] [-topNN] [-numFetchers numFetchers] [-adddays numDays] [-noFilter] [-noNorm] [-maxNumSegments num]`,此过程会基于已有的...

    Solrj 中文教程

    - **2.1.3 验证安装**:启动服务并访问Solr管理界面。 ##### 2.2 中文分词配置 为了支持中文搜索,需要配置中文分词器: - **2.2.1 mmseg4j**:一种常用的中文分词库。 - **2.2.2 paoding**:另一种常用的中文分...

    nutch入门学习

    - **分析**:Nutch 使用 Lucene 或 Solr 等工具进行搜索查询,返回相关文档列表。 ##### 5.4 分析 - **Nutch 的其他一些特性**:包括插件机制、API 接口等,允许用户根据需要扩展和定制功能。 #### 6. Nutch 分析...

    Ambari搭建HadoopAmbari搭建Hadoop_.docx

    - Ambari并不需要安装Hue或Solr等额外组件,但这些组件可以在安装过程中作为选项添加。 ##### 1.2 系统最低需求 - **操作系统要求**:支持的操作系统包括Red Hat Enterprise Linux (RHEL) v7.0、7.1、7.2等。 - **...

    ElasticSearch中文学习教程

    通过对索引过程的源码分析,可以深入了解文档如何被索引到ElasticSearch中,以及相关的优化技巧。 #### 六、问题解决 **7.1. 索引修复** 当索引损坏时,需要采取相应的修复措施。常见的修复方法包括重建索引、...

Global site tag (gtag.js) - Google Analytics