问题 是否可以在solrconfig.xml中为dataDir变量使用环境变量?


我们有一种情况,我们必须在一台机器或几台不同的机器上创建运行在不同端口上的Solr / Tomcat的多个实例。为此,我想知道是否可以使用环境变量来指定dataDir变量(在solrconfig.xml中),例如: <dataDir>${envvar}/path/to/index</dataDir>


5634
2018-02-06 15:56


起源

不确定是否可以使用环境变量,但可以按照说明使用系统属性 这里。 - nikhil500


答案:


由于我正在进行类似的设置,我也需要这个。我认为将ENV变量用于此是不错的做法。您可能最好使用多核设置或在solr.xml中使用属性文件。

例如。

<core name="core_1" instanceDir="core_1" properties="core1.properties" />

然后在你的core1.properties中:

config.datadir=/datadir1

然后在solrconfig.xml中使用它:

<dataDir>${config.datadir}</dataDir>

干杯,

帕特里克


7
2018-02-06 17:23



它也可以在data-config.xml中使用吗? - Basil Musa


是的,你可以做到这一点,但你需要跳过几个箍来设置它 使用传递给JVM的系统属性 当你开始它。

您希望环境变量在配置文件中工作的任何地方,将变量放在这样的:

${VAR}

然后,当您启动JVM时,通过执行以下操作将变量传递给它:

java -DVAR=$your-system-variable

所以,为了使这个具体,这就是我们所做的:

java -DINSTALL_ROOT=$INSTALL_ROOT -jar -server start.jar

我们的配置有类似的东西:

<filter class="solr.SynonymFilterFactory" synonyms=${INSTALL_ROOT}/Solr/conf/synonyms.txt />

奇迹般有效。


4
2017-08-21 18:34





多核心 。

您可以告诉Solr将特定索引目录部署为核心。例如,要部署Solr索引 path_to_instance_directory 上 http://localhost:8983/solr/coreX,你会这样做:

http://localhost:8983/solr/admin/cores?action=CREATE&name=coreX&instanceDir=path_to_instance_directory&config=config_file_name.xml&schema=schem_file_name.xml&dataDir=data

您可以告诉Solr创建,加载,交换两个正在运行的核心,使用非活动核心交换正在运行的核心等。


2
2018-02-06 17:02





如上所述 wiki.apache.org,您可以使用系统属性替换 solrconfig.xml 如下:

<dataDir>${data.dir}</dataDir>

然后,您可以在属性文件中指定值:

#solrcore.properties
data.dir=/data/solrindex

另一种方法是在Solr运行期间以这种方式指示数据目录:

java -Dsolr.data.dir=/data/dir -jar start.jar

并在XML文件中使用以下语法:

<dataDir>${solr.data.dir:./solr/data}</dataDir>

我认为更好的方法是定义 solr.xml 在你的 solr.home,例如:

<solr persistent="true" sharedLib="lib">
 <cores adminPath="/admin/cores">
  <core name="core0" instanceDir="core0" dataDir="/var/lib/solr/core0" />
  <core name="core1" instanceDir="core1" dataDir="/var/lib/solr/core1" />
 </cores>
</solr>

注意:我认为你不能在这里使用任何外部变量。


最后使用JVM系统属性文件(例如 solr.xmlconf/Catalina/localhost, 例如:

<Context docBase="webapps/solr.war" crossContext="true">
  <Environment name="solr/home" type="java.lang.String" value="/opt/solr/ads_solr" override="true" />
  <Environment name="solr/data/dir" type="java.lang.String" value="/var/lib/solr" override="true" />
</Context>

哪里 solr/home 但是会起作用 solr/data/dir  不行 没有修补你的Solr。

看到: tomcat_solr.xml.erb


0
2018-05-29 16:10