SolrTomcat

Solr with Apache Tomcat

Solr runs fine with [WWW] Tomcat, see the instructions in the generic Solr installation page for general info before consulting this page.

  1. Solr with Apache Tomcat
    1. Simple Example Install
    2. Optional Configuration
      1. Logging
      2. URI Charset Config
      3. Configuring Solr Home with JNDI
    3. Multiple Solr Webapps
    4. Tomcat on Windows
      1. Single Solr app
      2. Multiple Solr apps

Simple Example Install

People have occasionally reported problems getting Solr to work with Tomcat -- usually as a result of confusion stemming from the multitudes of ways tomcat can be installed and configured (particularly if tomcat is installed by some package management system designed for the specific OS).

These steps illustrate the minimal possible steps needed to install both Tomcat and Solr from scratch by relying on the default "Solr Home Dir" ...

#if you copy this to a shell script, make sure to run dos2unix on it to ensure correct line-endings
mkdir solr-tomcat
cd solr-tomcat/
wget http://mirrors.ibiblio.org/pub/mirrors/apache/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25.zip
NIGHTLY=solr-`/bin/date +%F`
wget http://people.apache.org/builds/lucene/solr/nightly/$NIGHTLY.zip
unzip apache-tomcat-5.5.25.zip
unzip $NIGHTLY.zip
cp apache-solr-nightly/dist/apache-solr-nightly.war apache-tomcat-5.5.25/webapps/solr.war
cp -r apache-solr-nightly/example/solr .
chmod a+x apache-tomcat-5.5.25/bin/*
./apache-tomcat-5.5.25/bin/startup.sh
echo "Now browse to http://localhost:8080/solr/admin/"
#Note that the startup.sh script is run from the directory containing your solr home ./solr
#since the solr webapp looks for $CWD/solr by default.
#You can use JNDI or a System property to configure the solr home directory (described below)
#If you want to run the startup.sh from a different working directory.

In addition to using the default behavior of relying on the Solr Home being in the current working directory (./solr) you can alternately add the solr.solr.home system property to your JVM settings before starting Tomcat...

export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/my/custom/solr/home/dir/"

...or use a Context file to configure the Solr Home using JNDI (see below)

Optional Configuration

Logging

For information about controlling JDK Logging (aka: java.util logging) in Tomcat, please consult the Tomcat docs... [WWW] http://tomcat.apache.org/tomcat-6.0-doc/logging.html

URI Charset Config

If you are going to query Solr using international characters (>127) using HTTP-GET, you must configure Tomcat to conform to the URI standard by accepting percent-encoded UTF-8.

Edit Tomcat's conf/server.xml and add the following attribute to the correct Connector element: URIEncoding="UTF-8".

<Server ...>
 <Service ...>
   <Connector ... URIEncoding="UTF-8"/>
     ...
   </Connector>
 </Service>
</Server>

This is only an issue when sending non-ascii characters in a query request... no configuration is needed for Solr/Tomcat to return non-ascii chars in a response, or accept non-ascii chars in an HTTP-POST body.

Configuring Solr Home with JNDI

A Tomcat context fragments can be used to configure the JNDI property needed to specify your Solr Home directory.

Just put a context fragment file under $CATALINA_HOME/conf/Catalina/localhost that looks something like this...

$ cat /tomcat55/conf/Catalina/localhost/solr.xml

<Context docBase="/some/path/solr.war" debug="0" crossContext="true" >
   <Environment name="solr/home" type="java.lang.String" value="/my/solr/home" override="true" />
</Context>

A few things to keep in mind:

Multiple Solr Webapps

Tomcat context fragments make configuring multiple Solr webapps (with JNDI) in a single Tomcat server easy.

Just follow the previous instructions for "Configuring Solr Home with JNDI" to create a seperate context fragment file under $CATALINA_HOME/conf/Catalina/localhost for each solr webapp you want to run:

$ cat /tomcat55/conf/Catalina/localhost/solr1.xml

<Context docBase="/some/path/solr.war" debug="0" crossContext="true" >
   <Environment name="solr/home" type="java.lang.String" value="/some/path/solr1home" override="true" />
</Context>

$ cat /tomcat55/conf/Catalina/localhost/solr2.xml

<Context docBase="f:/solr.war" debug="0" crossContext="true" >
   <Environment name="solr/home" type="java.lang.String" value="/some/path/solr2home" override="true" />
</Context>

Don't put anything related to Solr under the webapps directory.

The solr home directories are configured via JNDI in the context fragment, and in the examples above will be /some/path/solr1home and /some/path/solr2home The URLs to the two webapps will be http://host:port/solr1 and http://host:port/solr2

Tomcat on Windows

Single Solr app

Multiple Solr apps

last edited 2008-06-01 17:58:20 by HossMan