Apache SolrでPDFをアップロードしてインデックスする
普通にドキュメントに書いてるのでそれを参考にしつつやってみた
http://wiki.apache.org/solr/SolrTomcat を参考にして環境構築
とりあえずTomcatにデプロイしてやるのでTomcatを用意。んでSolrをダウンロードしてきてdistディレクトリに入ってるwarファイルをTomcatにデプロイ(/path/to/tomcat/webapps/solr.warな感じで)
で動かしても動かない。設定ファイル等がもろもろ無いので、solrのパッケージにあるexample/solrっていうディレクトリをデプロイ先にコピーする。でその前にsolr/homeっていうのの設定が必要な模様なので/path/to/tomcat/conf/Catalina/localhost/solr.xmlを作成
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="/opt/tomcat/webapps/solr/solr.war" debug="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/opt/tomcat/webapps/solr/solr" override="true"/>
</Context>
んまぁドキュメントに書いてますんでそれをそのまま参考にして作成ってな感じ。でまだ動かない。正確には動くんだけどPDFとかを処理してくれるRequestHandlerなやつが動かない。なのでsolrconfig.xmlを修正。場所は/path/to/tomcat/webapps/solr/solr/collections/conf/solrconfig.xmlにあるはず、上記の設定だと
<lib dir="/opt/tomcat/webapps/solr/contrib/extraction/lib" regex=".*.jar" />
<lib dir="/opt/tomcat/webapps/solr/dist/" regex="solr-cell-d.*.jar" />
この2つに直せば良いかと。でこのcontribとdistはsolrパッケージ内にある同名のディレクトリを上記の設定通りにコピーする
多分これでオッケー。サーバーを起動してstartupエラーが出てない事を確認。あとはインデックスに載せたいPDFファイルをcurlでぶん投げるだけ。ぶん投げ先は http://localhost:8080/solr/update/extract
そのドキュメントは http://wiki.apache.org/solr/ExtractingRequestHandler にある
curl "http://localhost:8080/solr/update/extract?literal.id=test1&captureAttr=true" --data-binary @test.pdf -H "Content-Type:application/pdf
な感じで。で http://localhost:8080/solr なDashboardを見てみると
な感じで(他にもやっちゃったんで2つインデックスがありますけど)
んじゃ検索を実行してみるのでインデックスに入れたPDFがFuelPHP関係のやつだったので http://localhost:8080/solr/query?q=fuelphp な感じでアクセスすると
な感じでPDFの内容が解析されてインデックスに載せれたり出来る模様(解析される方式はApache Tikaを使ってる模様)
まぁそんな感じでPDFだとかWord等のデータをインデックスに載せちゃう事もできちゃうっていうオチで