Можно ли использовать переменные среды в файле solrconfig.xml для переменной dataDir?

У нас есть ситуация, когда мы должны создать несколько экземпляров Solr/Tomcat, работающих на разных портах как на одной машине, так и на нескольких разных машинах. На пути к этому я задавался вопросом, можно ли указать переменную dataDir (в файле solrconfig.xml) с использованием переменной среды, например: <dataDir>${envvar}/path/to/index</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