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

时间:2012-02-06 15:56:03

标签: solr

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

4 个答案:

答案 0 :(得分:8)

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

例如

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

然后在你的core1.properties中:

config.datadir=/datadir1

然后在solrconfig.xml中使用它:

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

干杯,

帕特里克

答案 1 :(得分:4)

是的,你可以这样做,但是当你启动它时,你需要跳过几个箍来设置它{。{3}}。

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

${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 />

像魅力一样。

答案 2 :(得分:2)

转到multi-core

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

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创建,加载,交换两个正在运行的核心,使用非活动核心交换正在运行的核心等。

答案 3 :(得分:0)

正如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>

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

最后在solr.xml中使用JVM系统属性文件(例如conf/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 won't work无需修补您的Solr。

请参阅:tomcat_solr.xml.erb