SQL Server でのフルテキストインデックスを利用した フリーテキスト検索 - SQL Server
SQL Serverでフリーテキスト検索をする手順を紹介します。
フルテキストインデックスの作成
フルテキスト検索をする場合は、フルテキスト検索用のインデックス「フルテキストインデックス」を作成する必要があります。
フルテキストインデックスの作成手順については「
SQL Server のフルテキストインデックスを作成する (SQL Server Management Studio を利用)」を参照してください。また、SQLでフルテキストインデックスを作成することもできます。SQLでのフルテキスト作成手順は「
フルテキストインデックスをSQLで作成する」を参照してください、。
フルテキスト検索
SQL Serverでフルテキスト検索をするには、Contains または Freetext を使用します。Contains と Freetextの違いは以下の通りです。
Contains
CONTAINS (または CONTAINSTABLE) は、単語または語句との完全一致検索やあいまい一致検索、特定の範囲内での近接検索、または重み付き検索に使用します。 CONTAINS を使用する場合は、検索するテキストを指定する検索条件を少なくとも 1 つ指定し、一致を判断する条件を指定する必要があります。
Freetext
FREETEXT (または FREETEXTTABLE) は、指定した単語、語句、または文章 (freetext 文字列) の正確な文字列の並びではなく意味を照合する場合に使用します。 指定した列のフルテキスト インデックスに、用語または一定の形式の用語が見つかった場合は、一致すると判断されます。
書式
書式は以下の通りになります。
Contains
select (列名) from (テーブル名) where contains(検索列名(複数ある場合は()でくくる), 検索キーワード)
Freetext
select (列名) from (テーブル名) where freetext(検索列名(複数ある場合は()でくくる), 検索キーワード)
SQL例
Containsの例
select * from info where contains((title,document),'キーワード')
空白を含むワード
空白を含む場合や、完全一致の場合は、キーワードをダブルクォーテーションで囲みます。
select * from info where contains((title,document),'"キーワード 発見"')
ORの利用
どちらかのワードを含む場合は、キーワードをorで区切ります。
select * from info where contains((title,document),'キーワード or 発見')
ANDの利用
両方のワードを含む場合は、キーワードをandで区切ります。
select * from info where contains((title,document),'キーワード and 発見')
ワイルドカードの利用
ワイルドカードを利用する場合は、ワードをダブルクォーテーションで囲みワイルドカードを「*」で表現します。
select * from info where contains((title,document),'"ワード*"')
FreeTextの例
select * from info where freetext((title,document),'キーワード')
空白を含むワード
空白を含む場合や、完全一致の場合は、キーワードをダブルクォーテーションで囲みます。
select * from info where freetext((title,document),'"キーワード 発見"')
ORの利用
どちらかのワードを含む場合は、キーワードをorで区切ります。
select * from info where freetext((title,document),'キーワード or 発見')
ORの利用
両方のワードを含む場合は、キーワードをandで区切ります。
select * from info where freetext((title,document),'キーワード and 発見')
ワイルドカードの利用
ワイルドカードを利用する場合は、ワードをダブルクォーテーションで囲みワイルドカードを「*」で表現します。
select * from info where freetext((title,document),'"ワード*"')
例
以下のデータのテーブルを準備します。
id | name | value | category | memo |
1 | Penguin | 300 | B | 南国にすむペンギンです |
2 | Whale | 420 | M | 北極海のクジラです |
3 | Duck | 120 | B | そこらへんのアヒルです |
4 | Camel | 220 | M | 砂漠にすむラクダです |
5 | Owl | 90 | B | 関東のフクロウです |
下記のSQLを実行します。
select * from Working where contains((name,memo),'ペンギン')
SQLの実行結果が表示されます。id=1の「南国にすむペンギンです」の"ペンギン"にヒットして検索結果が表示されました。
CONTAINSTABLE, FREETEXTTABLE
結果を行ではなく、テーブルで返す場合は、CONTAINSTABLE, FREETEXTTABLEを利用できます。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。