У нас есть ситуация, когда мы должны создать несколько экземпляров Solr/Tomcat, работающих на разных портах как на одной машине, так и на нескольких разных машинах. На пути к этому я задавался вопросом, можно ли указать переменную dataDir (в файле solrconfig.xml) с использованием переменной среды, например: <dataDir>${envvar}/path/to/index</dataDir>
.
Можно ли использовать переменные среды в файле solrconfig.xml для переменной dataDir?
Ответ 1
Поскольку я работаю над подобной настройкой, мне тоже нужно это. Я не считаю хорошей практикой использовать для этого переменные ENV. Вероятно, вам лучше использовать многоядерную установку или использовать файл свойств в файле solr.xml.
например.
<core name="core_1" instanceDir="core_1" properties="core1.properties" />
а затем в файле core1.properties:
config.datadir=/datadir1
а затем используйте его в файле solrconfig.xml:
<dataDir>${config.datadir}</dataDir>
Приветствия,
Патрик
Ответ 2
Да, вы можете это сделать, но вам нужно сделать прыжок через пару обручей, чтобы установить это используя свойства системы, переданные в 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 />
Работает как шарм.
Ответ 3
Перейти многоядерный.
Вы можете указать 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 о создании, загрузке, обмене двумя работающими ядрами, обмене работающим ядром с неактивным ядром и т.д.
Ответ 4
Как объяснено в 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.
Смотрите: tomcat_solr.xml.erb