如何在Solr 4.4+中共享内核之间的架构和配置?

时间:2013-08-01 09:36:47

标签: solr solr4

我想从旧的solr.xml格式迁移到4.4中的核心自动发现,但是我遇到了在核心之间共享配置(solrconfig.xml,schema.xml和相关文件)的问题

我的旧solr.xml是这样的:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
  <cores defaultCoreName="core1" adminPath="/admin/cores">
    <core instanceDir="."name="core1" dataDir="core/core1"/>
    <core instanceDir="."name="core2" dataDir="core/core2"/>
    ...
  </cores>
</solr>

目录结构:

solr.xml
conf
   schema.xml
   solrconfig.xml
   ...
core
    core1
    core2
    ...

一切都以这种方式完美运行,整个配置在核心之间共享。它正在工作,因为所有核心的实例目录都相同,并且conf目录在它下面。

使用4.4中的核心自动发现,不可能为所有核心使用相同的实例目录。虽然,我找到了一个有效的解决方案:

目录结构:

solr.xml
common
    conf
        schema.xml
        solrconfig.xml
        ...
core
    core1
        core.properties
        data
    core2
        core.properties
        data
    ...

solr.xml:

<solr>
    <str name="sharedLib">common</str>
</solr>

core.properties:

name=core1

它的工作原理是因为conf目录位于类路径中,这要归功于shareLib指令。但它并不完全令人满意,因为我无法在admin webapp中显示配置文件,我得到以下异常:

java.lang.NullPointerException
    at org.apache.solr.handler.admin.ShowFileRequestHandler.showFromFileSystem(ShowFileRequestHandler.java:210)
    at org.apache.solr.handler.admin.ShowFileRequestHandler.handleRequestBody(ShowFileRequestHandler.java:122)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)

有没有更好的方法在4.4中的所有核心之间共享配置?

1 个答案:

答案 0 :(得分:1)

我们遇到了同样的问题。我们尝试在core.properties文件夹中指定相对路径,但这不起作用。

我们最终要做的是在SOLRHome文件夹中创建一个conf文件夹,然后在core / conf目录中创建符号链接。

以下是我为创建符号链接而执行的命令:

ln -s ../../conf/solrconfig.xml solrconfig.xml
ln -s ../../conf/schema.xml schema.xml