The sky is the limit

Vue.js、PHP、Java、Cordova、Monacaを中心にハイブリッドアプリ開発、PWA開発など効率的なWEB、iOS、Androidアプリ開発の情報を共有します。

【AWS CloudSearch】CloudSearchの実装で困ったところ Part.1【Java】

【AWS CloudSearch】CloudSearchの実装で困ったところ Part.1【Java】

f:id:duo-taro100:20160218004611p:plain

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;
}

今回は以上です。
他にもいくつか困ったことがあったので、記事にして行きたいと思います。