一、为何使用多core?

    Solr实例支持多core比启用多index要好(do more)。多core同时解决了在生产环境下的一些关键需求:

        1.重建索引

        2.测试配置变更

        3.合并索引

        4.运行时重命名core

    Solr Multicore 是 solr 1.3 的新特性。其目的一个solr实例,可以有多个搜索应用。

    我们既可以把不同类型的数据放到同一index中,也可以使用分开的多indexes。基于这一点,你只需知道如何使用多 indexes(实际上就是运行Solr的多实例)。尽管如此,为每一个类型添加一个完整的Solr实例会显得太臃肿庞大。

    Solr1.3引入了Solr core的概念,该方案使用一个Solr实例管理多个indexes,这样就有热点core(hot core)的重读(reloading)与交换(swap,通常是读index与写index交换),那么管理一个 core或index也容易些。每个Solr core由它自己的配置文件和索引数据组成。在多core执行搜索和索引几乎和没有使用core一样。你只是添加core的名字为各自不同的URL。单core情况下的如下搜索:

    http://localhost:8080/solr/select?q=dave%20matthews

在多core环境下,你可以通过如下方式访问一个名为core1的core:

    localhost:8080/solr/core1/select?q=name:Extreme

   并非在URL中引入core name的参数名值对,而是用不同的context。这样就可以像在单core中执行你的管理任务,搜索,更新操作。

二、多core的配置

    2.1、在主目录创建core相关文件和文件夹

    在\example目录下有一个multicore的文件夹(笔者的路径是F:\solr\solr-4.7.2\example\multicore)。这里配置了两个core,分别是core0和core1。把这两个文件夹复制进主目录中。因为主目录中本来有了默认的core(collection1),所以现在将有三个core同时存在。

    

    2.2、修改solr.xml

    包含三个core的solr.xml如下所示:

 
  
  
    
  
  
  
  
  
            
      
${urlScheme:}            

    我们对比下当只有默认的一个core时的文件:

  
    
${host:}    
${jetty.port:8983}    
${hostContext:solr}    
${zkClientTimeout:30000}    
${genericCoreNodeNames:true}  
  
    
${socketTimeout:0}    
${connTimeout:0}  

    原始的solr.xml文件并没有对core的单独配置(因为都是默认的路劲)。而多core的配置文件则需要对core进行基本配置,主要包含“name”(core的名字)、“instanceDir”(在主目录下的相对路径)、“confDir”(配置文件的目录路径,即conf目录,默认是core下的conf目录)、“dataDir”(数据文件的目录路径,即data目录,默认是core下的data目录)等。

    一些关键的配置值是:

      A)、Persistent="false"指明运行时的任何修改我们不做保存。如拷贝。如果你想保存从启动起的一些改动,那就把 persistent设置为true。如果你的index策略是完成建index到一个纯净的core中然后交换到活动core 那么你绝对应该设为true。

      B)、sharedLib="lib"指明了所有core的jar文件的lib目录。如果你有一个core有自己需要的jar文件,那么你可以把他们置入到core/lib目录。例如:karaoke core 使用 Solr Cell来索引化富文本内容,因此那些用来解析和抽取富文本的jar文件被放到./examples/cores/karaoke/lib/.

    2.3、运行

    如果上面的配置都正常的话,基本的配置都ok了!那我们重启tomcat,打开admin界面。

    

    从“Core Selection”上可以看到我们已经配置好的三个core。而对他们的操作在已经介绍过了。如果不太清楚的,可以去看看笔者的这篇博文。

    多个core的配置已经好了,我们就可以根据不同的需求、对不同的core进行不同的配置、实现不同目的的搜索了!