【Solr】SolrCellについて [その2]

木曜日, 11月 22, 2012

こんにちは、Curious Vehicle中鉢です。

前回はSolrCellを経由してHTMLの内容をインデキシングしてみました。

今回はその他いろいろなファイルをインデキシングしたり、

パラメータによってSolrへのインデキシングの内容を

制御したりしてみようと思います。

いろいろなファイルを読み込ませてみる

前回はHTMLファイルを読み込ませてみて

  • title
  • links
  • content-type
  • content
  • _version_
といった内容のデータが取れることがわかりました。
今回はそのほかのOffice、PDFといったファイルを読み込ませてみようと思います。
とりあえずはTikaのSupported Document Formatsのページから適当に
いくつかピックアップして読み込ませてみました。
  1. Officeドキュメント
  2. PDF
  3. オーディオファイル(mp3)
  4. ビデオファイル(mpg)
  5. 画像ファイル(png)
  6. メールファイル(eml)
読み込ませてみた結果
以下のようなフィールドが取れてきました。

ファイル読み込み結果

オーディオ、ビデオ、画像ファイル等のフィールドは
あまりそちら方面に詳しくないので
よくわからないフィールドが多かったのですが、そのほかは大体
フィールド名から察しがつくような内容が入っていました。
とりあえず使うことが多そうなのは
  • content(ファイルの内容)
  • content-type(ファイルのタイプ)
の2つあたりだと思われます。

パラメータによるインデキシングの制御

前回は以下のような感じでhtmlをパースしました。

$ cd apache-solr-4.0.0
$ cd docs/solr-cell/
$ curl "http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true" -F "myfile=@index.html"

この「/update/extract」のハンドラに対してどういったパラメータが渡せるのかを見ていきます。

 fmap.<source_field>=<target_field> デフォルトのフィールド以外のフィールドにデータをインデキシングしたい場合に指定する。source_fieldがデフォルトのフィールド名、target_fieldがこちら側で指定したいフィールド名になります。
 boost.<fieldname>=<float>  フィールドのブースト値の指定。
 literal.<fieldname>=<value>  valueで指定した値をfieldnameにインデキシングする。
 uprefix=<prefix>  既定のフィールド(content等)を作成する際にフィールド名に付与するプレフィクスを指定する。ダイナミックフィールドをあわせて設定しておくとすべての既定フィールドを登録できる。(※既定のフィールドを登録しようとしてSolr側にそのフィールドの定義がない場合には無視されます。)
 extractOnly=(true|false)  Solrに対してのインデキシングを行わず、テキストの抽出のみを行います。
 resource.name=<filename>  ファイル名を指定。このパラメータを指定することにより、Tika側でMIMETYPEの判断をする際のヒントとして利用することが出来ます。また、resourcenameというフィールドを追加することができるようです。
 lowernames=(true|false) インデキシングする際のフィールド名を小文字に(ハイフンはアンダースコアに)正規化する。デフォルトはtrue
 literalsOverride=(true|false)  literal<.fieldname>で指定した値を上書きするか追加するかの選択。(Solr4.0から)
 resource.password=<password>  パスワードのかかったファイルをインデキシングするための設定。こちらはパスワードをURLパラメータで指定(Solr4.0から)
 passwordsFile=<file name>  パスワードのかかったファイルをインデキシングするための設定。こちらはファイルでパスワードを指定する。パスワードファイルはsolrのクラスパスもしくはconfディレクトリに置く必要があるようです。また、resource.nameに値を指定しないとファイルをpdfと判定してくれない場合があるため、このパラメータを利用する際はresource.nameを一緒に指定しておくとよさそうです。(Solr4.0から)
 extractFormat=xml|text  extractOnlyのパラメータを指定していた場合に展開したデータを返すフォーマットを指定。

ざっとこんなパラメータが利用可能になっています。

「テキストの内容はcontentフィールドではなく別途用意してある形態素フィールドに読み込ませたい」とか、「ドキュメントのIDをこちらで指定するものにしたい」という要望は必ずあると思うのでfmapやliteralあたりの使用例を下記に挙げておきます。

literalは前回のindex.htmlを利用した際に使っていましたね。

以下のように「literal.id=doc1」と指定することにより、idフィールドにdoc1が登録されるようになります。

$ curl "http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true" -F "myfile=@index.html"

fmapは少しややこしく、fmap.<source_field>=<target_field>という形をとるのですがsource_fieldの部分に、先のファイル読み込み結果の画像に書かれているフィールド名を、target_fieldの部分にインデキシングしたいフィールド名を記載します。たとえば「content」の内容をsolr側の「japanese_text」というsolr側で用意している形態素フィールドへインデキシングしたい場合には

$ curl "http://localhost:8983/solr/update/extract?literal.id=doc1&fmap.content=japanese_text&commit=true" -F "myfile=@tutorial.html"

こんな感じでコマンドをたたきます。これで、japanese_textというフィールドにcontentの内容がインデキシングされるようになります。

この他にも4つほど利用可能なパラメータがあるのですが現段階でまだ動作が確認できてないため、動作が確認出来次第公開していきます。

さて、今回はファイルごとのフィールドデータとパラメータによるインデキシングの制御について見てきました。次回はSimple Post Toolによるインデキシングを見ていきたいと思います。

それではまた!

コメントを残す

CAPTCHA