全文クエリ結果のテスト
このステップでは、全文クエリをテストし、改良して、目的の結果が返されることを確認します。様々な検索語句とブール演算子を試して、可能な限り高い検索精度を達成します。
まず、MySQL サーバーに接続し、search_db
データベースを使用していることを確認します。接続が閉じている場合は、以下のコマンドを使用して再接続します。
mysql -u root -p
パスワードの入力を求められたら、root パスワードを入力します。その後、データベースを選択します。
USE search_db;
まずは、articles
テーブルのデータを確認してみましょう。
SELECT * FROM articles;
これにより、テーブルの現在の内容が表示されます。
+----+--------------------------+---------------------------------------------------------------------+
| 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」という単語を含み、かつ「indexing」または「optimizing」を含む記事を検索したいとします。これは、括弧を使用して任意の用語をグループ化することで実現できます。
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL +(indexing optimizing)' IN BOOLEAN MODE);
このクエリは、「MySQL」を必須とし、さらに「indexing」または「optimizing」のいずれかを含むことを要求します。
出力は次のようになります。
+----+--------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+--------------------------+---------------------------------------------------------------------+
| 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. |
+----+--------------------------+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
記事 1 は、「MySQL」のみを含み、「indexing」または「optimizing」を含まないため除外されます。
別のシナリオを試してみましょう。「MySQL」に関する記事で、特に「queries」に関してでは ない 記事を検索したいとします。
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL -queries' IN BOOLEAN MODE);
このクエリは、「MySQL」を必須とし、「queries」を含む記事を除外します。
出力は次のようになります。
+----+------------------------+---------------------------------------------------------------------+
| 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. |
+----+------------------------+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
「MySQL Queries」に関する記事 3 は除外されます。
次に、結果のランク付けを試してみましょう。>
と <
演算子を使用して、関連性スコアに影響を与えることができます。「MySQL」に関する記事を検索し、「indexing」も言及している記事を優先したいとします。
SELECT id, title, content, MATCH (title, content) AGAINST ('+MySQL >indexing' IN BOOLEAN MODE) AS relevance FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL >indexing' IN BOOLEAN MODE) ORDER BY relevance DESC;
このクエリは、「MySQL」を必須とし、「indexing」を含む記事の関連性を高めます。結果は関連性の降順で並べ替えられます。
出力は次のようになります。
+----+--------------------------+---------------------------------------------------------------------+-----------+
| id | title | content | relevance |
+----+--------------------------+---------------------------------------------------------------------+-----------+
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. | 1.6931 |
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. | 0.3068 |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. | 0.3068 |
+----+--------------------------+---------------------------------------------------------------------+-----------+
3 rows in set (0.00 sec)
「Indexing in MySQL」の記事が最初に表示されることに注意してください。これは、>indexing
の条件により、関連性スコアが高くなっているためです。
様々な検索語句とブール演算子を試すことで、全文クエリを微調整して、目的の結果を得ることができます。常にクエリを十分にテストして、期待どおりに動作することを確認するようにしてください。
これで、MySQL での全文検索に関する実験は終了です。全文インデックスを追加する方法、MATCH AGAINST
を使用して基本的な検索を行う方法、高度な検索のためにブールモードを使用する方法、およびクエリ結果をテストする方法を学びました。