SolrをTomcat7で動かす

インストールメモ。
 
サーバはCentOS6.4。
TomcatはJPackageリポジトリを使ってYumで入れる。
Solrは4.2.0をtarで取って来る。
 

インストール

# jpackage
cd /tmp/
wget http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm
yum -y install jpackage-release-6-3.jpp6.noarch.rpm

# tomcat7
yum install java tomcat7
service tomcat7 start
chkconfig tomcat7 on

# solr
cd /tmp/
wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/4.2.0/solr-4.2.0.tgz
tar -xvf solr-4.2.0.tgz

cp -rp /tmp/solr-4.2.0/example/solr /var/lib/tomcat7/
cp -rp /tmp/solr-4.2.0/contrib /var/lib/tomcat7/solr/
cp -rp /tmp/solr-4.2.0/dist /var/lib/tomcat7/solr/
chown tomcat:tomcat -R /var/lib/tomcat7/solr

cp /tmp/solr-4.2.0/example/webapps/solr.war /var/lib/tomcat7/webapps/
# solr.warをzip解凍する。tomcatが立ち上がっていれば自動で解凍される。

 

設定

server.xmlの編集

「/etc/tomcat7/server.xml」を編集
「useBodyEncodingForURI」を追加する。

<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"/>

 

solrのweb.xmlの編集

「/var/lib/tomcat7/webapps/solr/WEB-INF/web.xml」を編集
SolrRequestFilterの手前に追加

<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

solr.xmlの追加

「/etc/tomcat7/Catalina/localhost」にsolr.xmlを作成する。
ディレクトリが存在しない場合は作成する。

<?xml version="1.0" encoding="utf-8"?>
<Context docBase="/var/lib/tomcat7/webapps/solr" debug="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/var/lib/tomcat7/solr" override="true"/>
</Context>

 

APIレスポンス確認

$ curl http://127.0.0.1:8080/solr/collection1/select
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">44</int><lst name="params"/></lst><result name="response" numFound="0" start="0"></result>
</response>