Attachment base64でエンコードしたフィールドが検索できない


(Rei) #1

・事象
ES2.3.5にてbase64でエンコードしたフィールドが検索できない
ES1.6だとできる

・データの状態
ES2.3.5とES1.6のbase64エンコード値は全く同じ

・クエリー
{"query":{"match":{"fileContent":"ソフトウェアプログラム"}}}
・環境
win2008/ES2.3.5/jre1.8.0_91 64bit
・成功した環境
win2008/ES1.6/jre1.8.0_91 64bit

1.6だとうまくいくのですが、2.3.5だと何か特殊な設定が必要なのでしょうか?


(Jun Ohtani) #2

mapper-attachment pluginを使ってており、fileContentというフィールドにattachmentのTypeを指定していると想定して回答します。(間違ってたら言ってください。あと、質問するときはMappingなどを提示するとわかりやすいです。)

1.6の場合、Mapper-attachmentはfileContentの下にfileContentというフィールドを生成していました

2.xのMapper-attachmentはattachmentのタイプが指定してあるフィールド名ではなく、contentというフィールド名固定となるように変わっています

まず、この点が2.xとの違いです。
さらに、2.xでは、検索のDSLなどで利用するフィールド名を厳密に指定するように変更が入っています。

1.xではfileContentで検索した場合に、どの階層にあるかはわからないが、fileContentというフィールド全てに検索する仕組みでした。厳密には1.6ではfileContent.fileContentというフィールドに検索が実行されています。

ですので、2.xでは、クエリをfileContent.contentに変更すると検索できるようになるはずです。


(system) #3