記事検索

検索ワードを入力してください。
Sky Tech Blog
【SQL Server】フルテキスト検索の​注意事項​(記号編)

【SQL Server】フルテキスト検索の​注意事項​(記号編)

SQL Serverのフルテキスト検索の注意事項について説明します。記号の扱いに関する注意点を中心に、CONTAINSを使用した検索時の挙動やエスケープ文字の使用方法について解説します。

SQL Serverにおける「フルテキスト検索の注意事項」について紹介します。

フルテキスト検索とは、データベース内のテキストデータを効率的に検索するための機能です。具体的には、データベースに格納されているテキストデータ全体を対象にして、特定のキーワードやフレーズを検索することができます。

フルテキスト検索用のインデックス(フルテキストインデックス)を利用することで、データベース内のテキストベースのデータに対して通常の検索と比較して高速な検索を行うことが可能です。

速度としては優秀ですが、いくつか注意点があります。
その注意点の中から今回は記号に着目して記述します。

SQL Serverでフルテキスト検索を行うにはCONTAINSとFREETEXTが用意されていますが、今回はCONTAINSについて記載します。

注意点1:フルテキスト検索では​記号が​無視されたり​無視されなかったりする

フルテキスト検索では記号が含まれることを想定していないため、記号が無視されたり無視されなかったりします。
例えば「#」は無視されるのに「!」は無視されません。
記号が無視されたり無視されなかったりすると、想定通りの挙動をしないこともあるので、基本的にはフルテキストインデックスに記号を含まないようにするほうが無難だと考えます。

例)
対象テーブル[user_table]

クエリ

SELECT user_last_name, user_first_name, user_name_search
FROM user_table
WHERE CONTAINS((user_name_search), '"*青 空*"')

実行結果

注意点2:ダブルクォーテーション ​「"」を​検索文字列に​入れると​SQLExceptionに​なる

記号が無視されるだけならまだしも、Exceptionになるのは回避したいものです。
「"」がExceptionになる理由は構文エラーです。
フルテキスト検索に使用しているCONTAINSの構文規則では「"」は意味のある記号になるため、構文エラーになります。
他にも、構文エラーになる記号としてシングルクォーテーション「'」があります。
これらはエスケープ文字が用意されているため、この問題に対してはエスケープ文字を使用すれば問題ありません。

例)
対象テーブル[user_table]

クエリ

SELECT user_last_name, user_first_name, user_name_search
FROM user_table
WHERE CONTAINS((user_name_search), '"*青 " 空*"')

実行結果

以上になります。本記事が一助になれば幸いです。


XFacebookLINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム