下記のコードのように、contains()において、検索する文字列を中カッコで括るか、括らないかによって、
検索結果が変わります。
中カッコを付けない場合はヒットせず、中カッコを付けた場合はヒットします。
文字列1と文字列2、 文字列2と文字列3の間にはそれぞれ半角スペースが含まれています。
中カッコはどんな役割を果たしているのでしょうか?
ご教授のほど宜しくお願いいたします。
SQL
1select * from テーブル名 where contains(カラム名,'文字列1 文字列2 文字列3') > 0; //ヒットしない。 2select * from テーブル名 where contains(カラム名,'{文字列1 文字列2 文字列3}') > 0; //ヒットする。
##試したこと。
調べたら、中カッコをつけると、予約語をエスケープするということはわかりました。
しかし、今回の例では「文字列1 文字列2 文字列3」に予約語や記号は一切使ってません。
文字列1~文字列3は日本語の漢字と全角のカタカナのみです。
##追記。具体的なデータと検索結果。
実際にsampleテーブルのidx_dataのカラムに入っているデータが下記です。
日本 国内産 モデル
・{}をつけない場合。
SQL
1select * from sample where contains(idx_data,'日本') > 0; → ヒットする。 2select * from sample where contains(idx_data,'国内産') > 0; → ヒットする。 3select * from sample where contains(idx_data,'モデル') > 0; → ヒットする。 4select * from sample where contains(idx_data,'日本 国内産') > 0; → ヒットしない。 5select * from sample where contains(idx_data,'国内産 モデル') > 0; → ヒットする。 6select * from sample where contains(idx_data,'日本 国内産 モデル') > 0; → ヒットしない。
・{}をつけた場合。
SQL
1select * from sample where contains(idx_data,'{日本}') > 0; → ヒットする。 2select * from sample where contains(idx_data,'{国内産}') > 0; → ヒットする。 3select * from sample where contains(idx_data,'{モデル}') > 0; → ヒットする。 4select * from sample where contains(idx_data,'{日本 国内産}') > 0; → ヒットする。 5select * from sample where contains(idx_data,'{国内産 モデル}') > 0; → ヒットする。 6select * from sample where contains(idx_data,'{日本 国内産 モデル}') > 0; → ヒットする。