我们有一种情况,我们必须在一台机器或几台不同的机器上创建运行在不同端口上的Solr / Tomcat的多个实例。为此,我想知道是否可以使用环境变量来指定dataDir变量(在solrconfig.xml中),例如: <dataDir>${envvar}/path/to/index</dataDir>
。
我们有一种情况,我们必须在一台机器或几台不同的机器上创建运行在不同端口上的Solr / Tomcat的多个实例。为此,我想知道是否可以使用环境变量来指定dataDir变量(在solrconfig.xml中),例如: <dataDir>${envvar}/path/to/index</dataDir>
。
由于我正在进行类似的设置,我也需要这个。我认为将ENV变量用于此是不错的做法。您可能最好使用多核设置或在solr.xml中使用属性文件。
例如。
<core name="core_1" instanceDir="core_1" properties="core1.properties" />
然后在你的core1.properties中:
config.datadir=/datadir1
然后在solrconfig.xml中使用它:
<dataDir>${config.datadir}</dataDir>
干杯,
帕特里克
是的,你可以做到这一点,但你需要跳过几个箍来设置它 使用传递给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 />
奇迹般有效。
走 多核心 。
您可以告诉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创建,加载,交换两个正在运行的核心,使用非活动核心交换正在运行的核心等。
如上所述 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.xml
) 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
不行 没有修补你的Solr。