2012-02-06 10 views
11

Abbiamo una situazione in cui dobbiamo forse creare più istanze di Solr/Tomcat in esecuzione su porte diverse su una singola macchina o su diverse macchine. Verso questo mi chiedevo se è possibile specificare la variabile dataDir (all'interno di solrconfig.xml) usando una variabile di ambiente per esempio in questo modo: <dataDir>${envvar}/path/to/index</dataDir>.È possibile utilizzare le variabili di ambiente all'interno di solrconfig.xml per la variabile dataDir?

+1

Non sono sicuro se è possibile utilizzare le variabili di ambiente, ma le proprietà di sistema può essere utilizzato come spiegato [qui] (http://wiki.apache.org/solr/SolrConfigXml#System_property_substitution). – nikhil500

risposta

7

Come sto lavorando su un setup simile, avevo bisogno anche di questo. Non penso che sia una buona pratica usare le variabili ENV per questo. Probabilmente stai meglio usando l'installazione multicore o usa un file di proprietà in solr.xml.

es.

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

e poi nelle vostre core1.properties:

config.datadir=/datadir1 

e quindi utilizzare che nel vostro solrconfig.xml:

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

Cheers,

Patrick

+0

Può essere utilizzato anche in data-config.xml? –

2

Vai a multi-core.

Si può dire a Solr di distribuire una directory indice particolare come nucleo. Ad esempio, per distribuire un indice Solr su path_to_instance_directory su http://localhost:8983/solr/coreX, si dovrebbe fare:

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 

Si può dire Solr per creare, caricare, scambiare due core in esecuzione, scambiare un nucleo in esecuzione con un nucleo inattivo ecc

4

Sì, puoi farlo, ma tu È necessario fare un salto attraverso un paio di cerchi per impostare questo using system properties passed to the JVM quando lo si avvia.

ovunque si desidera la vostra variabile d'ambiente per lavorare nei file di configurazione, mettere la variabile in questo modo:

${VAR} 

Poi, quando si avvia il JVM, passare la variabile facendo:

java -DVAR=$your-system-variable 

Quindi, per rendere questo concreto, ecco quello che facciamo:

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

E la nostra configurazione ha s Qualcosa del genere:

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

Funziona come un fascino.

0

Come spiegato sul wiki.apache.org, è possibile utilizzare la sostituzione proprietà di sistema in solrconfig.xml come di seguito:

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

Quindi è possibile specificare i valori in un file delle proprietà:

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

Un altro modo è per dettare la directory dei dati durante il runtime Solr in questo modo:

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

e in file XML utilizzare la seguente sintassi:

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

penso che il metodo migliore è quello di definire solr.xml all'interno solr.home, ad esempio:

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

Nota: I don Penso che tu possa usare qualsiasi variabile esterna qui.


Infine utilizzando il file proprietà di sistema JVM (ad esempio solr.xml) in conf/Catalina/localhost, ad esempio:

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

dove solr/home avrebbe funzionato, tuttavia solr/data/dirwon't work senza patch tuo Solr.

See: tomcat_solr.xml.erb

Problemi correlati