Skip to content
Masao Takaku edited this page Aug 22, 2016 · 12 revisions

SunspotでSolr Cellを使用してテキストを抽出する

以下の例では、sunspot_solrを使用しています。

sunspot_solr

solrにlibディレクトリを追加します。

$ cd ~/enju
$ mkdir solr/lib

solr-5.5.1.tgz をダウンロードして展開し、必要なjarをコピーします。

$ wget https://archive.apache.org/dist/lucene/solr/5.5.1/solr-5.5.1.tgz
$ tar zxvf solr-5.5.1.tgz
$ cd solr-5.5.1
$ cp dist/solr-cell-5.5.1.jar ~/enju/solr/lib/
$ cp contrib/extraction/lib/* ~/enju/solr/lib/

solr/configsets/sunspot/conf/solrconfig.xml に以下の行を追加します。

  <admin>
    <defaultQuery>*:*</defaultQuery>
  </admin>

  <!-- ここから -->
  <lib dir="../../../lib/" />
  <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler" startup="lazy">
    <lst name="defaults">
      <str name="fmap.content">text</str>
      <str name="lowernames">true</str>
      <str name="uprefix">ignored_</str>
      <str name="captureAttr">true</str>
      <str name="fmap.a">links</str>
      <str name="fmap.div">ignored_</str>
    </lst>
  </requestHandler>
  <!-- ここまで -->

</config>

Enju側で環境変数 ENJU_EXTRACT_TEXT に「true」を設定します。

$ echo ENJU_EXTRACT_TEXT=true >> ~/enju/.env

enju_leafとSolrを再起動します。

動作確認を行います。ここではproduction環境を例とし、テキストを抽出するファイルをexample.pdfとします。

$ curl "http://localhost:8983/solr/default/update/extract?extractOnly=true&wt=ruby" -F "[email protected]"

正常にテキストが抽出できていれば、以下のメソッドで、Manifestationに添付したファイルから抽出したテキストが、manifestationsテーブルのfulltextカラムに保存されるようになります。

$ rails c production
> manifestation = Manifestation.first
> manifestation.extract_text
Clone this wiki locally