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
に変更すると検索できるようになるはずです。