2012-02-06 12 views
11

Mamy sytuację, w której musimy utworzyć wiele instancji Solr/Tomcat działających na różnych portach na jednym komputerze lub kilku różnych maszynach. W tym kierunku zastanawiałem się, czy możliwe jest określenie zmiennej dataDir (w obrębie solrconfig.xml) przy użyciu zmiennej środowiskowej, na przykład: <dataDir>${envvar}/path/to/index</dataDir>.Czy można używać zmiennych środowiskowych w pliku solrconfig.xml dla zmiennej dataDir?

+1

Nie jestem pewien, czy można używać zmiennych środowiskowych, ale właściwości System może być używany jak wyjaśniono [tutaj] (http://wiki.apache.org/solr/SolrConfigXml#System_property_substitution). – nikhil500

Odpowiedz

7

Ponieważ pracuję nad podobną konfiguracją, też tego potrzebowałem. Nie sądzę, że dobrą praktyką jest używanie do tego zmiennych ENV. Prawdopodobnie lepiej jest użyć konfiguracji wielordzeniowej lub użyć pliku właściwości w pliku solr.xml.

np.

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

a następnie w swoim core1.properties:

config.datadir=/datadir1 

a następnie użyć jej w swojej solrconfig.xml:

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

Wiwaty,

Patrick

+0

Czy można go również użyć w pliku data-config.xml? –

2

Idź multi-core.

Możesz powiedzieć Solr, aby wdrożył określony katalog indeksu jako rdzeń. Na przykład, aby wdrożyć indeks Solr na path_to_instance_directory na http://localhost:8983/solr/coreX, zrobiłbyś:

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 

Można powiedzieć Solr tworzenie, obciążenia, zamienić dwa działające rdzenie, zamienić uruchomioną rdzeń z nieaktywnym rdzenia itp

4

Tak, możesz to zrobić, ale y Musisz przeskoczyć kilka obręczy, aby ustawić to using system properties passed to the JVM po uruchomieniu.

Gdziekolwiek chcesz, aby zmienna pracować w plikach konfiguracyjnych, umieścić zmienną takiego:

${VAR} 

Następnie, po uruchomieniu JVM, przekazać ją zmienną wykonując:

java -DVAR=$your-system-variable 

Tak, aby ten beton, oto co robimy:

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

A nasz config ma s coś podobnego:

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

Działa jak urok.

0

Jak wyjaśniono na wiki.apache.org, można użyć systemu podstawienie nieruchomości w solrconfig.xml jak poniżej:

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

Następnie można określić wartości w pliku właściwości:

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

Innym sposobem jest dyktowanie katalogu danych w czasie wykonywania Solr w następujący sposób:

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

w pliku XML, należy użyć następującej składni:

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

Myślę, że lepszą metodą jest określenie solr.xml w swoim solr.home, np:

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

Uwaga: I don Myślę, że możesz tu użyć dowolnych zmiennych zewnętrznych.


Wreszcie używając JVM pliku właściwości systemu (np solr.xml) w conf/Catalina/localhost, na przykład:

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

gdzie solr/home będzie działać, jednak solr/data/dirwon't work bez łatania swoją Solr.

Patrz: tomcat_solr.xml.erb

Powiązane problemy