Elasticsearch Image Plugin — メタデータ

Elasticsearch Image Plugin — metadataの設定・取得方法

Miyuki Endo
4 min readApr 17, 2014

Elasticsearch Image Plugin — インストールから検索までの手順では、Image Pluginを使いマッピング、インデックス、検索まで一通り行いましたが、検索結果を眺めているとmetadataが返ってきていないことに気付きました。metadataはアプリケーション側で使いたいシーンもあるため、ここではmetadata関連の設定についてメモしておきます。

マッピング定義

metadataのマッピング方法はガイドにも記載されている通り、内部ではmetadata-extractorが使われています。出力サンプルを見ると分かりやすいと思いますが、画像の高さ、幅からカメラや写真の詳細情報まで取得できるようです。(元画像にその情報が含まれていればです)

Image Pluginを使いElasticsearchにmetadataをインデックスしたい場合は、mapping定義にDirectory.TagNameのフォーマットで小文字、スペースは”_”に置換えて設定します。

metadata-extractor Sample Output

マッピング定義サンプル

curl -XPOST 'localhost:9200/photo' -d '{
"mappings":{
"scenery":{
・・・
"metadata":{
"jpeg.image_width": {"type": "string","store": "yes"},
"jpeg.image_height": {"type": "string","store": "yes"},
"jpeg.compression_type":{"type":"string","store":"yes"},
"exif_ifd0.x_resolution":{"type":"string","store":"yes"}
}
}
}
}'

metadataの取得

先程も記述しましたが、何も考えずクエリーを実行してしまうとmetadataは返ってきません。metadataをアプリケーション側で表示などで使いたい場合は、クエリーに返して欲しいフィールドを指定する必要があります。

curl -XPOST 'localhost:9200/photo/scenery/_search?pretty' -d '{
"query":{
"image":{
"my_img":{
"feature":"CEDD",
"index":"photo",
"type":"scenery",
"id":"0",
"path":"my_img",
"hash":"BIT_SAMPLING"
}
}
},
"fields": [
"file_name",
"my_img.metadata.jpeg.image_height",
"my_img.metadata.jpeg.image_width",
"my_img.metadata.jpeg.compression_type",
"my_img.metadata.exif_ifd0.x_resolution"
]

}'

このように”fields”を指定したクエリーを実行すると、指定したmetadataが画像データに含まれている場合、結果として返ってきます。

fields を指定した検索結果

マッピング定義やクエリーにmetadataを設定しても、オリジナル画像に指定したメタ情報が入っていない場合は、インデックスに入らないし、もちろん検索しても対象となるmetadataは返ってきません。

以上で、Elasticsearch Image Plugin の metadata に関するノートは終わりです。

--

--