2026年11月8日
2026年11月8日
MySQLのフルテキスト検索(FULLTEXT)の使い方
ステップ1: FULLTEXTインデックスの追加
FULLTEXTインデックスは、特定のカラムに全文検索を適用するために使用します。まず、テーブルに適切なカラムを指定してフルテキストインデックスを追加します。
# インデックス対象のテーブルを作成する場合
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
FULLTEXT (title, content)
);
# 現存するテーブルにFULLTEXTインデックスを追加する場合
ALTER TABLE articles ADD FULLTEXT(title, content);
ステップ2: 検索実行
フルテキストインデックスを利用した検索は、MATCH AGAINST文を使用します。この文は検索ワードと比較するために使用し、関連するレコードを取得できます。
# 基本的な全文検索
SELECT * FROM articles WHERE MATCH(title, content) AGAINST ('検索キーワード');
# 類似度スコアを含む全文検索
SELECT *, MATCH(title, content) AGAINST ('検索キーワード' IN BOOLEAN MODE) AS score
FROM articles
WHERE MATCH(title, content) AGAINST ('検索キーワード' IN BOOLEAN MODE);
ステップ3: トランザクションとインデックス更新
FULLTEXTインデックスは大規模なデータ操作やトランザクションの影響を受けることがあります。そのため、必要に応じて手動でインデックスを更新することが推奨されます。
# トランザクション中でもフルテキストインデックスを更新する
SET FOREIGN_KEY_CHECKS=0;
START TRANSACTION;
-- ここでデータ操作を行う
COMMIT;
SET FOREIGN_KEY_CHECKS=1;
# フルテキストインデックスの手動更新
UPDATE articles SET FULLTEXT(title, content);
ステップ4: 実践とトラブルシュート
FULLTEXT検索を実装する際には、複数の考慮事項があります。以下にその一部を紹介します。
# 検索ワードに近似表現を含める
SELECT * FROM articles WHERE MATCH(title, content) AGAINST ('検索キーワード' IN NATURAL LANGUAGE MODE);
# カスタムスコアリングを使用する
SELECT *, (MATCH(title, content) AGAINST ('検索キーワード') + 0.1 * LENGTH(content)) AS score
FROM articles
WHERE MATCH(title, content) AGAINST ('検索キーワード' IN BOOLEAN MODE);
注意事項
- FULLTEXTインデックスの更新は時間とリソースを要するので、頻繁に行う必要はありません。
- トランザクション中にフルテキストインデックスが一時的に無効になる場合があります。この問題を避けるためには手動で更新を行うことが推奨されます。
- スコアリング関数は検索結果の優先順位を設定するのに役立ちますが、適切なパラメータを選択することが重要です。
まとめ
1. FULLTEXTインデックス: テーブルにフルテキストインデックスを追加し、高度な全文検索機能を利用するための基本操作。
2. MATCH AGAINST文: 全文検索を行う際にはMATCH AGAINST文を使用します。類似度スコアも取得できます。
3. トランザクションとインデックス更新: トランザクション中にフルテキストインデックスを定期的に更新する必要があります。
4. カスタムスコアリング: 検索結果の優先順位を調整するために、必要に応じてカスタムスコアリングを使用します。
関連記事: