【AWS CloudSearch】CloudSearchの実装で困ったところ Part.1【Java】
QueryPaeserがStructuredの場合、searchQueryのシングルクォーテーションやバックスラッシュをエスケープする必要がある
QueryPaeserがSimpleの場合
QueryPaeserがSimpleの場合はsearchQueryをシングルクウォートで括る必要はありません。
(例)
searchQuery : "テスト"
QueryPaeserがStructuredの場合
QueryPaeserがStructuredの場合はsearchQueryをシングルクウォートで括る必要があります。
(例)
searchQuery : "(and 'テスト')"
この場合キーワードが「テスト」だからいいですが、「your's」というキーワードの場合は何もしない場合
(例)
searchQuery : "(and 'your's')"
となり、Syntax Errorが起きてしまいます。そのため、「シングルクウォート」はエスケープしなければなりません。
同様に「\」が入っている場合もエスケープが必要です。
エスケープ内容
■シングルクォーテーションのエスケープ
// エスケープ前 your's // エスケープ後 your\'s
■バックスラッシュのエスケープ
// エスケープ前 AB\CD // エスケープ後 AB\\CD
「シングルクウォート」や「バックスラッシュ」の前に「バックスラッシュ」を追加すればいいです。
エスケープの方法
今回は以下のように実装しました。
/** * 「'」と「\」をエスケープして返します。 * @param str エスケープする文字列 */ public String escapeKeyword(String str) { String escaped = str.replace("\\", "\\\\"); escaped = escaped.replace("'", "\\'"); return escaped; }
今回は以上です。
他にもいくつか困ったことがあったので、記事にして行きたいと思います。