Rei
(Rei)
August 27, 2016, 6:03am
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だと何か特殊な設定が必要なのでしょうか?
johtani
(Jun Ohtani)
August 30, 2016, 6:30am
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に変更すると検索できるようになるはずです。