Officeドキュメントの中身検索をElasticSearchで行ってみた
※ 事前にkuromoji もインストールしていくこと
今回ポイントになる、mapper-attachment プラグインをインストール
mapper-attachment とは、
.pdfや.pptxに対応するためのプラグイン
これらに対応させるApache Tikaを扱うためのattachmentタイプを使えるようにしてくれる
./bin/elasticsearch-plugin install mapper-attachments
-> Downloading mapper-attachments from elastic
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.security.SecurityPermission createAccessControlContext
* java.security.SecurityPermission insertProvider
* java.security.SecurityPermission putProviderProperty.BC
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Installed mapper-attachments
kibanaでコマンド実行
インストールしたプラグインの確認
get /_nodes/plugins
Index作成
※ フィールドはcontent のみ
delete /search_doc
PUT /search_doc
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0,
"analysis": {
"tokenizer": {
"kuromoji_search": {
"type": "kuromoji_tokenizer",
"mode": "search"
}
},
"analyzer": {
"default": {
"tokenizer": "kuromoji_search",
"filter": [
"kuromoji_baseform",
"kuromoji_part_of_speech",
"cjk_width",
"stop",
"kuromoji_stemmer",
"lowercase"
]
}
}
}
}
},
"mappings": {
"series" : {
"properties" : {
"file" : {
"type" : "attachment",
"fields" : {
"content" : { "type": "text",
"term_vector": "with_positions_offsets",
"store": true
}
}
}
}
}
}
}
シェルスクリプトでファイルとIndexing.
※ 実行場所にtest.pptxを置いておかないとダメですよ。
#!/bin/sh
coded=`cat test.pptx | perl -MMIME::Base64 -ne 'print encode_base64($_)'`
json="{\"file\":\"${coded}\"}"
echo "$json" > json.file
curl -X POST "localhost:9200/search_doc/series/test.pptx" -d @json.file
検索実行
GET /search_doc/_search?pretty=true
{
"query": {
"match": {
"file.content": "テスト"
}
}
}