SQL Server CONTAINS演算子:前方一致から部分一致まで、フルテキスト検索を自在に操る
SQL Serverで前方一致のフルテキスト検索を行う方法
SQL Serverのフルテキスト検索機能は、前方一致検索を含む様々な種類の検索を実行することができます。前方一致検索は、検索文字列がクエリの最初の部分と一致するかどうかを調べます。
前方一致検索の例
例えば、"東京"という単語で前方一致検索を行う場合、以下のクエリを実行できます。
SELECT *
FROM documents
WHERE CONTAINS(document_column, '東京*')
このクエリは、"東京"で始まるすべてのドキュメントを返します。
前方一致検索は、PREFIX演算子を使用して実行されます。PREFIX演算子は、検索文字列がクエリの最初の部分と一致するかどうかを調べます。
SELECT *
FROM documents
WHERE CONTAINS(document_column, 'PREFIX 東京*')
前方一致検索には、いくつかの制限事項があります。
*前方一致検索は、前方一致する単語のみを検索します。部分一致検索には対応していません。 *前方一致検索は、ワイルドカード文字を使用して、前方一致する単語の一部を検索することができます。 *前方一致検索は、大文字と小文字を区別しません。
*顧客の名前で顧客レコードを検索する *商品名で商品情報を検索する *タイトルで文書を検索する
補足
上記の説明は、SQL Server 2019 をベースにしています。他のバージョンでは、機能や構文が異なる場合があります。
-- データベースの作成
CREATE DATABASE FullTextSearchDemo;
-- テーブルの作成
USE FullTextSearchDemo;
GO
CREATE TABLE Documents
(
DocumentID INT IDENTITY(1, 1) PRIMARY KEY,
DocumentTitle VARCHAR(MAX) NOT NULL,
DocumentContent VARCHAR(MAX) NOT NULL
);
-- フルテキストインデックスの作成
CREATE FULLTEXT INDEX ON Documents(DocumentTitle, DocumentContent);
-- データの挿入
INSERT INTO Documents (DocumentTitle, DocumentContent)
VALUES
('東京旅行記', '東京は日本の首都です。'),
('大阪グルメ', '大阪は美味しいものがたくさんあります。'),
('京都の歴史', '京都は日本の古都です。');
-- 前方一致検索
SELECT *
FROM Documents
WHERE CONTAINS(DocumentTitle, 'PREFIX 東京*');
-- 結果
-- DocumentID | DocumentTitle | DocumentContent
-- ---------- | ---------------------- | ----------------------
-- 1 | 東京旅行記 | 東京は日本の首都です。
このサンプルコードは、以下のことを示しています。
- データベースとテーブルの作成
- フルテキストインデックスの作成
- データの挿入
実行方法
- SQL Server Management Studio を起動します。
- 新しいデータベースを作成します。
- 上記のサンプルコードをデータベースに実行します。
- クエリを実行して、結果を確認します。
SQL Serverで前方一致のフルテキスト検索を行う他の方法
前方一致検索を行うもう一つの方法は、LIKE 演算子を使用することです。LIKE 演算子は、検索文字列がパターンと一致するかどうかを調べます。
SELECT *
FROM documents
WHERE document_column LIKE '東京%';
LIKE 演算子を使用する際は、以下の点に注意する必要があります。
- ワイルドカード文字 % は、0文字以上の任意の文字列に一致します。
SELECT *
FROM documents
WHERE document_column LIKE '東京%旅行記';
LIKE 演算子は、前方一致検索だけでなく、部分一致検索にも使用できます。
SELECT *
FROM documents
WHERE document_column LIKE '%東京%';
LIKE 演算子は、前方一致検索よりも高速に実行できます。ただし、前方一致検索よりも複雑な検索には対応していません。
CONTAINS 演算子
CONTAINS 演算子は、フルテキスト検索で使用される演算子です。CONTAINS 演算子は、検索文字列がクエリの条件と一致するかどうかを調べます。
SELECT *
FROM documents
WHERE CONTAINS(document_column, '東京*');
SELECT *
FROM documents
WHERE CONTAINS(document_column, '東京');
CONTAINS 演算子は、LIKE 演算子よりも複雑な検索に対応できます。ただし、LIKE 演算子よりも実行速度が遅くなります。
SQL Serverで前方一致のフルテキスト検索を行うには、以下の方法があります。
- PREFIX 演算子
- LIKE 演算子
それぞれの方法には、利点と欠点があります。使用する方法は、検索の要件によって異なります。
sql-server full-text-search