基本的な全文検索の実行
このステップでは、MATCH AGAINST 句を使用して articles テーブルに対して基本的な全文検索を実行します。これは、作成した全文インデックスを活用するための基本的な方法です。
MySQL シェル内にいて、search_db データベースを使用していることを確認してください。そうでない場合は、データベースを選択します。
USE search_db;
MATCH AGAINST 句は、SELECT ステートメントの WHERE 句内で使用されます。基本的な構文は次のとおりです。
SELECT column1, column2, ...
FROM table_name
WHERE MATCH (column_list) AGAINST ('search_term');
ここで、column_list は全文インデックスに含まれるカラムのカンマ区切りリスト(この場合は title と content)であり、'search_term' は検索したい単語またはフレーズです。
"MySQL" という単語を含む記事を検索してみましょう。
SELECT id, title, content FROM articles WHERE MATCH (title, content) AGAINST ('MySQL');
このクエリは、title または content カラムが "MySQL" という用語と一致する articles テーブルから id、title、content カラムを選択します。
以下の出力が表示されるはずです。
+----+--------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+--------------------------+---------------------------------------------------------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. |
+----+--------------------------+---------------------------------------------------------------------+
3 rows in set (0.00 sec)
すべての記事に "MySQL" という単語が含まれているため、3 つの記事すべてが返されます。
全文検索は、各行が検索用語にどれだけ一致するかを示す関連性スコアも提供します。このスコアを SELECT ステートメントに含めることができます。
SELECT id, title, content, MATCH (title, content) AGAINST ('MySQL') AS relevance FROM articles;
このクエリは、各行のスコアを示す relevance という名前のカラムを追加します。
+----+--------------------------+---------------------------------------------------------------------+--------------------+
| id | title | content | relevance |
+----+--------------------------+---------------------------------------------------------------------+--------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. | 1.34832763671875 |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. | 0.5215404033660889 |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. | 0.5215404033660889 |
+----+--------------------------+---------------------------------------------------------------------+--------------------+
3 rows in set (0.00 sec)
結果を関連性で並べ替えることで、最も一致するものを最初に表示できます。
SELECT id, title, content, MATCH (title, content) AGAINST ('MySQL') AS relevance FROM articles ORDER BY relevance DESC;
このクエリは、relevance スコアに基づいて結果を降順に並べ替えます。
+----+--------------------------+---------------------------------------------------------------------+--------------------+
| id | title | content | relevance |
+----+--------------------------+---------------------------------------------------------------------+--------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. | 1.34832763671875 |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. | 0.5215404033660889 |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. | 0.5215404033660889 |
+----+--------------------------+---------------------------------------------------------------------+--------------------+
3 rows in set (0.00 sec)
このステップでは、MATCH AGAINST を使用して基本的な全文検索を実行する方法と、関連性に基づいて結果を取得および並べ替える方法を学びました。次のステップでは、ブールモードを使用したより高度な検索オプションを調べます。