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?
Odpowiedz
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
Czy można go również użyć w pliku data-config.xml? –
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
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.
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/dir
won't work bez łatania swoją Solr.
Patrz: tomcat_solr.xml.erb
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