Solrのコアに写真の撮影日をTika経由で登録する
Apache Solrのコアに、Exifで記録された撮影日をTika経由で登録してみました。Solrのバージョンは、4.9.0です。
solrconfig.xml
uprefixの「ignored_」が、ここで設定しなかった撮影情報の接頭語になります。
<requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler" > <lst name="defaults"> <str name="lowernames">true</str> <str name="uprefix">ignored_</str> <str name="captureAttr">true</str> <str name="fmap.date_time_original">date_time_original</str> </lst> <lst name="date.formats"> <str>yyyy:MM:dd HH:mm:ss</str> </lst> </requestHandler>
最後の「date.formats」は、Tikaが撮影情報を読み取ると「2014:07:16 21:19:47」という形式でSolrに返します。しかし、この日時形式は標準ではサポートされていない為、日時の書式を追加しました。追加しなかった場合、写真をPOSTすると以下のエラーがSolrから返ってきます。
<lst name="responseHeader"> <int name="status">400</int> <int name="QTime">1455</int> </lst> <lst name="error"> <str name="msg">Invalid Date String:'2014:07:16 21:19:47'</str> <int name="code">400</int> </lst>
schema.xml
コアのスキーマに、撮影日(DateTimeOriginal)のフィールドを追加しました。ダイナミックフィールドの「ignored_*」は、スキーマに定義されていない撮影情報に関する設定です。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/> <field name="date_time_original" type="tdate" indexed="true" stored="true"/> <dynamicField name="ignored_*" type="string" indexed="false" stored="false" multiValued="true"/> <uniqueKey>id</uniqueKey>
写真のアップロード
curlコマンドで写真をアップロードしてテストしました。
$ curl 'http://127.0.0.1:8983/solr/exif/update/extract?literal.id=1&commit=true' -F "myFile=@DSCN0005.jpg" <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"><int name="status">0</int><int name="QTime">1297</int></lst> </response>
余談
日付型のフィールドに撮影日を登録する方法で悩んだので記事にしました。日付型にしたかったのは、撮影日でファセット検索したかったからです。