仮想開発環境の構築トップページ


MySQL を使う

ここの手順で Ubuntu の設定をすると MySQL データベース管理システムがインストールされています.このページでは MySQL を使った検索方法などを確認しよう.

目次

  1. データベース操作の基本
  2. Ngram インデックス
  3. MeCab インデックス
  4. mecab-ipadic-NEologd を使った MeCab インデックス
  5. 他のホストからの接続

Ngram インデックス

前のページで作成した articles テーブルにはフルテキストインデックスが作成されていなかったので,全文検索ができませんでした.ここでは,articles テーブルに Ngram フルテキストインデックスを追加して,全文検索が高速にできるようにします.

インデックスの追加

まず,ユーザ名 dbuser で MySQL にログインし,testDB データベースを選択します.

vagrant@ubuntu2204 ~ $ mysql -u dbuser -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES; ⏎
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| testDB             |
+--------------------+
3 rows in set (0.00 sec)

mysql> USE testDB; ⏎
Database changed
mysql>

まだフルテキストインデックスを使った検索ができないことを確認しておきます.

mysql> SELECT * FROM articles
    WHERE MATCH(body) AGAINST("software"); ⏎
ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list
mysql>

テーブル定義の詳細を確認した後,ALTER TABLE コマンドで articles テーブルの body フィールドに Ngram のフルテキストインデックスを追加します.さらに,テーブル定義の詳細でフルテキストインデックスを確認します.

mysql> SHOW CREATE TABLE articles\G ⏎
*************************** 1. row ***************************
       Table: articles
Create Table: CREATE TABLE `articles` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `body` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> ALTER TABLE articles
    ADD FULLTEXT INDEX ngram_idx(body)
    WITH PARSER ngram; ⏎
Query OK, 0 rows affected, 1 warning (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> SHOW CREATE TABLE articles\G ⏎
*************************** 1. row ***************************
       Table: articles
Create Table: CREATE TABLE `articles` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `body` text,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `ngram_idx` (`body`) /*!50100 WITH PARSER `ngram` */
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql>

目次に戻る

Ngram インデックスを使った全文検索

Ngram のフルテキストインデックスを利用した全文検索の例を示します.例えば「software」が含まれるレコードを検索します.

mysql> SELECT * FROM articles
    WHERE MATCH(body) AGAINST("software"); ⏎
+----+------------------------------------------------------------------+
| id | body                                                             |
+----+------------------------------------------------------------------+
|  9 | We consider a software rejuvenation schedule.                    |
| 11 | This model evaluates the quality characteristics of software.    |
| 12 | 複数の言語に対応した software 開発を勉強します                   |
+----+------------------------------------------------------------------+
3 rows in set (0.00 sec)

mysql>

「晴れ」が含まれる全文検索を行います.

mysql> SELECT * FROM articles
    WHERE MATCH(body) AGAINST("晴れ"); ⏎
+----+--------------------------------------+
| id | body                                 |
+----+--------------------------------------+
|  3 | 明日の天気も晴れでしょう             |
|  4 | 今日の天気は晴れです                 |
+----+--------------------------------------+
2 rows in set (0.00 sec)

mysql>

「自然言語」で検索したときに,「言語」だけが含まれるレコードも検索されていることに注意してください.

mysql> SELECT * FROM articles WHERE
    MATCH(body) AGAINST("自然言語"); ⏎
+----+--------------------------------------------------------------------------------------------------+
| id | body                                                                                             |
+----+--------------------------------------------------------------------------------------------------+
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |
|  8 | 自然言語処理の基本を説明します                                                                   |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |
+----+--------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql>

「言語」でも検索します.

mysql> SELECT * FROM articles
    WHERE MATCH(body) AGAINST("言語"); ⏎
+----+--------------------------------------------------------------------------------------------------+
| id | body                                                                                             |
+----+--------------------------------------------------------------------------------------------------+
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |
|  8 | 自然言語処理の基本を説明します                                                                   |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |
+----+--------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql>

目次に戻る

全文検索のモード

全文検索には「NATURAL LANGUAGE MODE」と「BOOLEAN MODE」の 2 種類があります.検索ワード「software」では結果に差は現れませんでした.

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("software" IN NATURAL LANGUAGE MODE); ⏎
+----+------------------------------------------------------------------+
| id | body                                                             |
+----+------------------------------------------------------------------+
|  9 | We consider a software rejuvenation schedule.                    |
| 11 | This model evaluates the quality characteristics of software.    |
| 12 | 複数の言語に対応した software 開発を勉強します                   |
+----+------------------------------------------------------------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("software" IN BOOLEAN MODE); ⏎
+----+------------------------------------------------------------------+
| id | body                                                             |
+----+------------------------------------------------------------------+
|  9 | We consider a software rejuvenation schedule.                    |
| 11 | This model evaluates the quality characteristics of software.    |
| 12 | 複数の言語に対応した software 開発を勉強します                   |
+----+------------------------------------------------------------------+
3 rows in set (0.00 sec)

mysql>

「晴れ」でも結果に差はありませんでした.

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("晴れ" IN NATURAL LANGUAGE MODE); ⏎
+----+--------------------------------------+
| id | body                                 |
+----+--------------------------------------+
|  3 | 明日の天気も晴れでしょう             |
|  4 | 今日の天気は晴れです                 |
+----+--------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("晴れ" IN BOOLEAN MODE); ⏎
+----+--------------------------------------+
| id | body                                 |
+----+--------------------------------------+
|  3 | 明日の天気も晴れでしょう             |
|  4 | 今日の天気は晴れです                 |
+----+--------------------------------------+
2 rows in set (0.00 sec)

mysql>

「自然言語」では検索結果に差が現れました.「NATURAL LANGUAGE MODE」では「言語」のみが含まれるレコードが検索されたのに対して,「BOOLEAN MODE」では「自然言語」そのものが含まれるレコードのみが検索されました.

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("自然言語" IN NATURAL LANGUAGE MODE); ⏎
+----+--------------------------------------------------------------------------------------------------+
| id | body                                                                                             |
+----+--------------------------------------------------------------------------------------------------+
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |
|  8 | 自然言語処理の基本を説明します                                                                   |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |
+----+--------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM articles
  WHERE MATCH(body)
  AGAINST("自然言語" IN BOOLEAN MODE); ⏎
+----+--------------------------------------------------------------------------------------------------+
| id | body                                                                                             |
+----+--------------------------------------------------------------------------------------------------+
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |
|  8 | 自然言語処理の基本を説明します                                                                   |
+----+--------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

mysql>

「言語」での検索結果にも差は現れませんでした.

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("言語" IN NATURAL LANGUAGE MODE); ⏎
+----+--------------------------------------------------------------------------------------------------+
| id | body                                                                                             |
+----+--------------------------------------------------------------------------------------------------+
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |
|  8 | 自然言語処理の基本を説明します                                                                   |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |
+----+--------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM articles
    WHERE MATCH(body)
    AGAINST("言語" IN BOOLEAN MODE); ⏎
+----+--------------------------------------------------------------------------------------------------+
| id | body                                                                                             |
+----+--------------------------------------------------------------------------------------------------+
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |
|  8 | 自然言語処理の基本を説明します                                                                   |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |
+----+--------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql>

目次に戻る

検索スコアの表示

検索スコアを表示することも可能です.「自然言語」を「NATURAL LANGUAGE MODE」で検索したときに,「言語」だけが含まれるレコードも検索されましたが,そのレコードのスコアが低いことがわかります.

mysql> SELECT id, body,
    MATCH(body) AGAINST("自然言語" IN NATURAL LANGUAGE MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+---------------------+
| id | body                                                                                             | score               |
+----+--------------------------------------------------------------------------------------------------+---------------------+
|  1 | 今日の天気は雨です                                                                               |                   0 |
|  2 | 明日の天気も雨でしょう                                                                           |                   0 |
|  3 | 明日の天気も晴れでしょう                                                                         |                   0 |
|  4 | 今日の天気は晴れです                                                                             |                   0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |  0.9525971412658691 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |  0.9525971412658691 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |                   0 |
|  8 | 自然言語処理の基本を説明します                                                                   |  0.9525971412658691 |
|  9 | We consider a software rejuvenation schedule.                                                    |                   0 |
| 10 | We propose an extended warranty service contract.                                                |                   0 |
| 11 | This model evaluates the quality characteristics of software.                                    |                   0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   | 0.22764469683170319 |
+----+--------------------------------------------------------------------------------------------------+---------------------+
12 rows in set (0.00 sec)

mysql>

「BOOLEAN MODE」での検索スコアも表示してみます.

mysql> SELECT id, body,
    MATCH(body) AGAINST("自然言語" IN BOOLEAN MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+--------------------+
| id | body                                                                                             | score              |
+----+--------------------------------------------------------------------------------------------------+--------------------+
|  1 | 今日の天気は雨です                                                                               |                  0 |
|  2 | 明日の天気も雨でしょう                                                                           |                  0 |
|  3 | 明日の天気も晴れでしょう                                                                         |                  0 |
|  4 | 今日の天気は晴れです                                                                             |                  0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   | 0.9525971412658691 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 | 0.9525971412658691 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |                  0 |
|  8 | 自然言語処理の基本を説明します                                                                   | 0.9525971412658691 |
|  9 | We consider a software rejuvenation schedule.                                                    |                  0 |
| 10 | We propose an extended warranty service contract.                                                |                  0 |
| 11 | This model evaluates the quality characteristics of software.                                    |                  0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |                  0 |
+----+--------------------------------------------------------------------------------------------------+--------------------+
12 rows in set (0.00 sec)

mysql>

目次に戻る

1文字での検索

次に,検索ワードが1文字の場合にどのような結果になるか検証します.検索ワードを「s」,「雨」,「は」として複数のモードで検索します.その結果,一切ヒットしなかったことがわかりました.この理由は次のセクションで考察しますが,Ngram の設定が Bi-gram になっているためであると考えられます.

mysql> SELECT id, body,
    MATCH(body) AGAINST("s" IN NATURAL LANGUAGE MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+-------+
| id | body                                                                                             | score |
+----+--------------------------------------------------------------------------------------------------+-------+
|  1 | 今日の天気は雨です                                                                               |     0 |
|  2 | 明日の天気も雨でしょう                                                                           |     0 |
|  3 | 明日の天気も晴れでしょう                                                                         |     0 |
|  4 | 今日の天気は晴れです                                                                             |     0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |     0 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |     0 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |     0 |
|  8 | 自然言語処理の基本を説明します                                                                   |     0 |
|  9 | We consider a software rejuvenation schedule.                                                    |     0 |
| 10 | We propose an extended warranty service contract.                                                |     0 |
| 11 | This model evaluates the quality characteristics of software.                                    |     0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |     0 |
+----+--------------------------------------------------------------------------------------------------+-------+
12 rows in set (0.00 sec)

mysql> SELECT id, body,
    MATCH(body) AGAINST("s" IN BOOLEAN MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+-------+
| id | body                                                                                             | score |
+----+--------------------------------------------------------------------------------------------------+-------+
|  1 | 今日の天気は雨です                                                                               |     0 |
|  2 | 明日の天気も雨でしょう                                                                           |     0 |
|  3 | 明日の天気も晴れでしょう                                                                         |     0 |
|  4 | 今日の天気は晴れです                                                                             |     0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |     0 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |     0 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |     0 |
|  8 | 自然言語処理の基本を説明します                                                                   |     0 |
|  9 | We consider a software rejuvenation schedule.                                                    |     0 |
| 10 | We propose an extended warranty service contract.                                                |     0 |
| 11 | This model evaluates the quality characteristics of software.                                    |     0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |     0 |
+----+--------------------------------------------------------------------------------------------------+-------+
12 rows in set (0.01 sec)

mysql> SELECT id, body,
    MATCH(body) AGAINST("雨" IN NATURAL LANGUAGE MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+-------+
| id | body                                                                                             | score |
+----+--------------------------------------------------------------------------------------------------+-------+
|  1 | 今日の天気は雨です                                                                               |     0 |
|  2 | 明日の天気も雨でしょう                                                                           |     0 |
|  3 | 明日の天気も晴れでしょう                                                                         |     0 |
|  4 | 今日の天気は晴れです                                                                             |     0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |     0 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |     0 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |     0 |
|  8 | 自然言語処理の基本を説明します                                                                   |     0 |
|  9 | We consider a software rejuvenation schedule.                                                    |     0 |
| 10 | We propose an extended warranty service contract.                                                |     0 |
| 11 | This model evaluates the quality characteristics of software.                                    |     0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |     0 |
+----+--------------------------------------------------------------------------------------------------+-------+
12 rows in set (0.00 sec)

mysql> SELECT id, body,
    MATCH(body) AGAINST("雨" IN BOOLEAN MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+-------+
| id | body                                                                                             | score |
+----+--------------------------------------------------------------------------------------------------+-------+
|  1 | 今日の天気は雨です                                                                               |     0 |
|  2 | 明日の天気も雨でしょう                                                                           |     0 |
|  3 | 明日の天気も晴れでしょう                                                                         |     0 |
|  4 | 今日の天気は晴れです                                                                             |     0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |     0 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |     0 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |     0 |
|  8 | 自然言語処理の基本を説明します                                                                   |     0 |
|  9 | We consider a software rejuvenation schedule.                                                    |     0 |
| 10 | We propose an extended warranty service contract.                                                |     0 |
| 11 | This model evaluates the quality characteristics of software.                                    |     0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |     0 |
+----+--------------------------------------------------------------------------------------------------+-------+
12 rows in set (0.00 sec)

mysql> SELECT id, body,
    MATCH(body) AGAINST("は" IN NATURAL LANGUAGE MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+-------+
| id | body                                                                                             | score |
+----+--------------------------------------------------------------------------------------------------+-------+
|  1 | 今日の天気は雨です                                                                               |     0 |
|  2 | 明日の天気も雨でしょう                                                                           |     0 |
|  3 | 明日の天気も晴れでしょう                                                                         |     0 |
|  4 | 今日の天気は晴れです                                                                             |     0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |     0 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |     0 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |     0 |
|  8 | 自然言語処理の基本を説明します                                                                   |     0 |
|  9 | We consider a software rejuvenation schedule.                                                    |     0 |
| 10 | We propose an extended warranty service contract.                                                |     0 |
| 11 | This model evaluates the quality characteristics of software.                                    |     0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |     0 |
+----+--------------------------------------------------------------------------------------------------+-------+
12 rows in set (0.01 sec)

mysql> SELECT id, body,
    MATCH(body) AGAINST("は" IN BOOLEAN MODE) as score
    FROM articles; ⏎
+----+--------------------------------------------------------------------------------------------------+-------+
| id | body                                                                                             | score |
+----+--------------------------------------------------------------------------------------------------+-------+
|  1 | 今日の天気は雨です                                                                               |     0 |
|  2 | 明日の天気も雨でしょう                                                                           |     0 |
|  3 | 明日の天気も晴れでしょう                                                                         |     0 |
|  4 | 今日の天気は晴れです                                                                             |     0 |
|  5 | 勤務先の社内自然言語処理勉強会での発表資料です                                                   |     0 |
|  6 | この文書は自然言語処理の基本として類似文書推薦について説明します                                 |     0 |
|  7 | この資料はジャズのライブについてまとめた資料です                                                 |     0 |
|  8 | 自然言語処理の基本を説明します                                                                   |     0 |
|  9 | We consider a software rejuvenation schedule.                                                    |     0 |
| 10 | We propose an extended warranty service contract.                                                |     0 |
| 11 | This model evaluates the quality characteristics of software.                                    |     0 |
| 12 | 複数の言語に対応した software 開発を勉強します                                                   |     0 |
+----+--------------------------------------------------------------------------------------------------+-------+
12 rows in set (0.00 sec)

mysql>

目次に戻る

インデックス詳細情報の確認

ここではフルテキストインデックスの詳細情報について確認し,「雨」などの1文字で検索できなかった理由も考えます.まず,dbuser には権限がないので root で MySQL にログインし直します.

mysql> EXIT ⏎
Bye
vagrant@ubuntu2204 ~ $ mysql -u root -p ⏎
Enter password: # パスワードを入力(表示されない)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.31-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

testDB データベースの articles テーブルについてインデックス情報を確認したいので,次のようなコマンドを実行します.

mysql> SET GLOBAL innodb_ft_aux_table="testDB/articles"; ⏎
Query OK, 0 rows affected (0.00 sec)

mysql>

インデックス情報は information_schema テーブルに格納されているのでそのテーブルを選択します.

mysql> SHOW DATABASES; ⏎
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testDB             |
+--------------------+
5 rows in set (0.00 sec)

mysql> USE information_schema; ⏎
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

多くのテーブルが定義されていますが,その中の INNODB_FT_INDEX_TABLE(または INNODB_FT_INDEX_CACHE)テーブルにインデクスの情報が格納されています.

mysql> SHOW TABLES; ⏎
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| ADMINISTRABLE_ROLE_AUTHORIZATIONS     |
| APPLICABLE_ROLES                      |
| CHARACTER_SETS                        |
| CHECK_CONSTRAINTS                     |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMNS_EXTENSIONS                    |
| COLUMN_PRIVILEGES                     |
| COLUMN_STATISTICS                     |
| ENABLED_ROLES                         |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| INNODB_BUFFER_PAGE                    |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_CACHED_INDEXES                 |
| INNODB_CMP                            |
| INNODB_CMPMEM                         |
| INNODB_CMPMEM_RESET                   |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_CMP_RESET                      |
| INNODB_COLUMNS                        |
| INNODB_DATAFILES                      |
| INNODB_FIELDS                         |
| INNODB_FOREIGN                        |
| INNODB_FOREIGN_COLS                   |
| INNODB_FT_BEING_DELETED               |
| INNODB_FT_CONFIG                      |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_FT_DELETED                     |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_INDEXES                        |
| INNODB_METRICS                        |
| INNODB_SESSION_TEMP_TABLESPACES       |
| INNODB_TABLES                         |
| INNODB_TABLESPACES                    |
| INNODB_TABLESPACES_BRIEF              |
| INNODB_TABLESTATS                     |
| INNODB_TEMP_TABLE_INFO                |
| INNODB_TRX                            |
| INNODB_VIRTUAL                        |
| KEYWORDS                              |
| KEY_COLUMN_USAGE                      |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| RESOURCE_GROUPS                       |
| ROLE_COLUMN_GRANTS                    |
| ROLE_ROUTINE_GRANTS                   |
| ROLE_TABLE_GRANTS                     |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMATA_EXTENSIONS                   |
| SCHEMA_PRIVILEGES                     |
| STATISTICS                            |
| ST_GEOMETRY_COLUMNS                   |
| ST_SPATIAL_REFERENCE_SYSTEMS          |
| ST_UNITS_OF_MEASURE                   |
| TABLES                                |
| TABLESPACES                           |
| TABLESPACES_EXTENSIONS                |
| TABLES_EXTENSIONS                     |
| TABLE_CONSTRAINTS                     |
| TABLE_CONSTRAINTS_EXTENSIONS          |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_ATTRIBUTES                       |
| USER_PRIVILEGES                       |
| VIEWS                                 |
| VIEW_ROUTINE_USAGE                    |
| VIEW_TABLE_USAGE                      |
+---------------------------------------+
79 rows in set (0.00 sec)

mysql>

Ngram のフルテキストインデックスは具体的には 2 文字ごとにインデックス化された Bi-gram であることがわかりました.このため「雨」などの 1 文字では検索できなかった可能性が考えられます.

mysql> SELECT * FROM INNODB_FT_INDEX_TABLE ORDER BY doc_id, position; ⏎
+--------+--------------+-------------+-----------+--------+----------+
| WORD   | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+--------+--------------+-------------+-----------+--------+----------+
| 今日   |            3 |           6 |         2 |      3 |        0 |
| 日の   |            3 |           6 |         4 |      3 |        3 |
| の天   |            3 |           6 |         4 |      3 |        6 |
| 天気   |            3 |           6 |         4 |      3 |        9 |
| 気は   |            3 |           6 |         2 |      3 |       12 |
| は雨   |            3 |           3 |         1 |      3 |       15 |
| 雨で   |            3 |           4 |         2 |      3 |       18 |
| です   |            3 |           9 |         4 |      3 |       21 |
| 明日   |            4 |           5 |         2 |      4 |        0 |
| 日の   |            3 |           6 |         4 |      4 |        3 |
| の天   |            3 |           6 |         4 |      4 |        6 |
| 天気   |            3 |           6 |         4 |      4 |        9 |
| 気も   |            4 |           5 |         2 |      4 |       12 |
| も雨   |            4 |           4 |         1 |      4 |       15 |
| 雨で   |            3 |           4 |         2 |      4 |       18 |
| でし   |            4 |           5 |         2 |      4 |       21 |
| しょ   |            4 |           5 |         2 |      4 |       24 |
| ょう   |            4 |           5 |         2 |      4 |       27 |
| 明日   |            4 |           5 |         2 |      5 |        0 |
| 日の   |            3 |           6 |         4 |      5 |        3 |
| の天   |            3 |           6 |         4 |      5 |        6 |
| 天気   |            3 |           6 |         4 |      5 |        9 |
| 気も   |            4 |           5 |         2 |      5 |       12 |
| も晴   |            5 |           5 |         1 |      5 |       15 |
| 晴れ   |            5 |           6 |         2 |      5 |       18 |
| れで   |            5 |           6 |         2 |      5 |       21 |
| でし   |            4 |           5 |         2 |      5 |       24 |
| しょ   |            4 |           5 |         2 |      5 |       27 |
| ょう   |            4 |           5 |         2 |      5 |       30 |
| 今日   |            3 |           6 |         2 |      6 |        0 |
| 日の   |            3 |           6 |         4 |      6 |        3 |
| の天   |            3 |           6 |         4 |      6 |        6 |
| 天気   |            3 |           6 |         4 |      6 |        9 |
| 気は   |            3 |           6 |         2 |      6 |       12 |
| は晴   |            6 |           6 |         1 |      6 |       15 |
| 晴れ   |            5 |           6 |         2 |      6 |       18 |
| れで   |            5 |           6 |         2 |      6 |       21 |
| です   |            3 |           9 |         4 |      6 |       24 |
| 勤務   |            7 |           7 |         1 |      7 |        0 |
| 務先   |            7 |           7 |         1 |      7 |        3 |
| 先の   |            7 |           7 |         1 |      7 |        6 |
| の社   |            7 |           7 |         1 |      7 |        9 |
| 社内   |            7 |           7 |         1 |      7 |       12 |
| 内自   |            7 |           7 |         1 |      7 |       15 |
| 自然   |            7 |          10 |         3 |      7 |       18 |
| 然言   |            7 |          10 |         3 |      7 |       21 |
| 言語   |            7 |          14 |         4 |      7 |       24 |
| 語処   |            7 |          10 |         3 |      7 |       27 |
| 処理   |            7 |          10 |         3 |      7 |       30 |
| 理勉   |            7 |           7 |         1 |      7 |       33 |
| 勉強   |            7 |          14 |         2 |      7 |       36 |
| 強会   |            7 |           7 |         1 |      7 |       39 |
| 会で   |            7 |           7 |         1 |      7 |       42 |
| での   |            7 |           7 |         1 |      7 |       45 |
| の発   |            7 |           7 |         1 |      7 |       48 |
| 発表   |            7 |           7 |         1 |      7 |       51 |
| 表資   |            7 |           7 |         1 |      7 |       54 |
| 資料   |            7 |           9 |         2 |      7 |       57 |
| 料で   |            7 |           9 |         2 |      7 |       60 |
| です   |            3 |           9 |         4 |      7 |       63 |
| この   |            8 |           9 |         2 |      8 |        0 |
| の文   |            8 |           8 |         1 |      8 |        3 |
| 文書   |            8 |           8 |         1 |      8 |        6 |
| 書は   |            8 |           8 |         1 |      8 |        9 |
| は自   |            8 |           8 |         1 |      8 |       12 |
| 自然   |            7 |          10 |         3 |      8 |       15 |
| 然言   |            7 |          10 |         3 |      8 |       18 |
| 言語   |            7 |          14 |         4 |      8 |       21 |
| 語処   |            7 |          10 |         3 |      8 |       24 |
| 処理   |            7 |          10 |         3 |      8 |       27 |
| 理の   |            8 |          10 |         2 |      8 |       30 |
| の基   |            8 |          10 |         2 |      8 |       33 |
| 基本   |            8 |          10 |         2 |      8 |       36 |
| 本と   |            8 |           8 |         1 |      8 |       39 |
| とし   |            8 |           8 |         1 |      8 |       42 |
| して   |            8 |           8 |         1 |      8 |       45 |
| て類   |            8 |           8 |         1 |      8 |       48 |
| 文書   |            8 |           8 |         1 |      8 |       51 |
| 類似   |            8 |           8 |         1 |      8 |       51 |
| 似文   |            8 |           8 |         1 |      8 |       54 |
| 書推   |            8 |           8 |         1 |      8 |       60 |
| 推薦   |            8 |           8 |         1 |      8 |       63 |
| 薦に   |            8 |           8 |         1 |      8 |       66 |
| につ   |            8 |           9 |         2 |      8 |       69 |
| つい   |            8 |           9 |         2 |      8 |       72 |
| いて   |            8 |           9 |         2 |      8 |       75 |
| て説   |            8 |           8 |         1 |      8 |       78 |
| 説明   |            8 |          10 |         2 |      8 |       81 |
| 明し   |            8 |          10 |         2 |      8 |       84 |
| しま   |            8 |          14 |         3 |      8 |       87 |
| ます   |            8 |          14 |         3 |      8 |       90 |
| この   |            8 |           9 |         2 |      9 |        0 |
| の資   |            9 |           9 |         1 |      9 |        3 |
| 資料   |            7 |           9 |         2 |      9 |        6 |
| 料は   |            9 |           9 |         1 |      9 |        9 |
| はジ   |            9 |           9 |         1 |      9 |       12 |
| ジャ   |            9 |           9 |         1 |      9 |       15 |
| ャズ   |            9 |           9 |         1 |      9 |       18 |
| ズの   |            9 |           9 |         1 |      9 |       21 |
| のラ   |            9 |           9 |         1 |      9 |       24 |
| ライ   |            9 |           9 |         1 |      9 |       27 |
| イブ   |            9 |           9 |         1 |      9 |       30 |
| ブに   |            9 |           9 |         1 |      9 |       33 |
| につ   |            8 |           9 |         2 |      9 |       36 |
| つい   |            8 |           9 |         2 |      9 |       39 |
| いて   |            8 |           9 |         2 |      9 |       42 |
| てま   |            9 |           9 |         1 |      9 |       45 |
| まと   |            9 |           9 |         1 |      9 |       48 |
| とめ   |            9 |           9 |         1 |      9 |       51 |
| めた   |            9 |           9 |         1 |      9 |       54 |
| 資料   |            7 |           9 |         2 |      9 |       54 |
| た資   |            9 |           9 |         1 |      9 |       57 |
| 料で   |            7 |           9 |         2 |      9 |       63 |
| です   |            3 |           9 |         4 |      9 |       66 |
| 自然   |            7 |          10 |         3 |     10 |        0 |
| 然言   |            7 |          10 |         3 |     10 |        3 |
| 言語   |            7 |          14 |         4 |     10 |        6 |
| 語処   |            7 |          10 |         3 |     10 |        9 |
| 処理   |            7 |          10 |         3 |     10 |       12 |
| 理の   |            8 |          10 |         2 |     10 |       15 |
| の基   |            8 |          10 |         2 |     10 |       18 |
| 基本   |            8 |          10 |         2 |     10 |       21 |
| 本を   |           10 |          10 |         1 |     10 |       24 |
| を説   |           10 |          10 |         1 |     10 |       27 |
| 説明   |            8 |          10 |         2 |     10 |       30 |
| 明し   |            8 |          10 |         2 |     10 |       33 |
| しま   |            8 |          14 |         3 |     10 |       36 |
| ます   |            8 |          14 |         3 |     10 |       39 |
| we     |           11 |          12 |         2 |     11 |        0 |
| co     |           11 |          12 |         2 |     11 |        3 |
| re     |           11 |          14 |         3 |     11 |        3 |
| ns     |           11 |          11 |         1 |     11 |        5 |
| er     |           11 |          13 |         3 |     11 |        9 |
| so     |           11 |          14 |         3 |     11 |       14 |
| ft     |           11 |          14 |         3 |     11 |       16 |
| tw     |           11 |          14 |         3 |     11 |       17 |
| re     |           11 |          14 |         3 |     11 |       20 |
| ej     |           11 |          11 |         1 |     11 |       24 |
| ju     |           11 |          11 |         1 |     11 |       25 |
| uv     |           11 |          11 |         1 |     11 |       26 |
| ve     |           11 |          11 |         1 |     11 |       27 |
| sc     |           11 |          11 |         1 |     11 |       36 |
| ch     |           11 |          13 |         2 |     11 |       37 |
| he     |           11 |          13 |         2 |     11 |       38 |
| ed     |           11 |          12 |         2 |     11 |       39 |
| du     |           11 |          11 |         1 |     11 |       40 |
| ul     |           11 |          11 |         1 |     11 |       41 |
| le     |           11 |          11 |         1 |     11 |       42 |
| we     |           11 |          12 |         2 |     12 |        0 |
| pr     |           12 |          12 |         1 |     12 |        3 |
| ro     |           12 |          12 |         1 |     12 |        4 |
| op     |           12 |          12 |         1 |     12 |        5 |
| po     |           12 |          12 |         1 |     12 |        6 |
| os     |           12 |          12 |         1 |     12 |        7 |
| se     |           12 |          12 |         1 |     12 |        8 |
| ex     |           12 |          12 |         1 |     12 |       14 |
| nt     |           12 |          12 |         1 |     12 |       14 |
| xt     |           12 |          12 |         1 |     12 |       15 |
| te     |           12 |          13 |         2 |     12 |       16 |
| nd     |           12 |          12 |         1 |     12 |       18 |
| ed     |           11 |          12 |         2 |     12 |       20 |
| se     |           12 |          12 |         1 |     12 |       24 |
| rr     |           12 |          12 |         1 |     12 |       25 |
| nt     |           12 |          12 |         1 |     12 |       28 |
| ty     |           12 |          13 |         2 |     12 |       29 |
| er     |           11 |          13 |         3 |     12 |       33 |
| rv     |           12 |          12 |         1 |     12 |       34 |
| ce     |           12 |          12 |         1 |     12 |       37 |
| co     |           11 |          12 |         2 |     12 |       40 |
| tr     |           12 |          12 |         1 |     12 |       43 |
| ct     |           12 |          13 |         2 |     12 |       46 |
| th     |           13 |          13 |         1 |     13 |        0 |
| mo     |           13 |          13 |         1 |     13 |        5 |
| od     |           13 |          13 |         1 |     13 |        6 |
| el     |           13 |          13 |         1 |     13 |        8 |
| ev     |           13 |          13 |         1 |     13 |       11 |
| lu     |           13 |          13 |         1 |     13 |       14 |
| te     |           12 |          13 |         2 |     13 |       17 |
| es     |           13 |          13 |         1 |     13 |       18 |
| th     |           13 |          13 |         1 |     13 |       21 |
| he     |           11 |          13 |         2 |     13 |       22 |
| te     |           12 |          13 |         2 |     13 |       22 |
| qu     |           13 |          13 |         1 |     13 |       25 |
| ty     |           12 |          13 |         2 |     13 |       30 |
| ch     |           11 |          13 |         2 |     13 |       33 |
| ct     |           12 |          13 |         2 |     13 |       38 |
| er     |           11 |          13 |         3 |     13 |       40 |
| st     |           13 |          13 |         1 |     13 |       43 |
| cs     |           13 |          13 |         1 |     13 |       46 |
| so     |           11 |          14 |         3 |     13 |       52 |
| ft     |           11 |          14 |         3 |     13 |       54 |
| tw     |           11 |          14 |         3 |     13 |       55 |
| re     |           11 |          14 |         3 |     13 |       58 |
| 複数   |           14 |          14 |         1 |     14 |        0 |
| 数の   |           14 |          14 |         1 |     14 |        3 |
| の言   |           14 |          14 |         1 |     14 |        6 |
| 言語   |            7 |          14 |         4 |     14 |        9 |
| 語に   |           14 |          14 |         1 |     14 |       12 |
| に対   |           14 |          14 |         1 |     14 |       15 |
| 対応   |           14 |          14 |         1 |     14 |       18 |
| 応し   |           14 |          14 |         1 |     14 |       21 |
| した   |           14 |          14 |         1 |     14 |       24 |
| so     |           11 |          14 |         3 |     14 |       31 |
| ft     |           11 |          14 |         3 |     14 |       33 |
| tw     |           11 |          14 |         3 |     14 |       34 |
| re     |           11 |          14 |         3 |     14 |       37 |
| 開発   |           14 |          14 |         1 |     14 |       40 |
| 発を   |           14 |          14 |         1 |     14 |       43 |
| を勉   |           14 |          14 |         1 |     14 |       46 |
| 勉強   |            7 |          14 |         2 |     14 |       49 |
| 強し   |           14 |          14 |         1 |     14 |       52 |
| しま   |            8 |          14 |         3 |     14 |       55 |
| ます   |            8 |          14 |         3 |     14 |       58 |
+--------+--------------+-------------+-----------+--------+----------+
213 rows in set (0.00 sec)

mysql>

見出し語 (word フィールド) を重複なく一覧で取り出してみます.これは DISTINCT を使うと良いでしょう.

mysql> SELECT DISTINCT word FROM INNODB_FT_INDEX_TABLE; ⏎
+--------+
| word   |
+--------+
| ce     |
| ch     |
| co     |
| cs     |
| ct     |
| du     |
| ed     |
| ej     |
| el     |
| er     |
| es     |
| ev     |
| ex     |
| ft     |
| he     |
| ju     |
| le     |
| lu     |
| mo     |
| nd     |
| ns     |
| nt     |
| od     |
| op     |
| os     |
| po     |
| pr     |
| qu     |
| re     |
| ro     |
| rr     |
| rv     |
| sc     |
| se     |
| so     |
| st     |
| te     |
| th     |
| tr     |
| tw     |
| ty     |
| ul     |
| uv     |
| ve     |
| we     |
| xt     |
| いて   |
| イブ   |
| この   |
| した   |
| して   |
| しま   |
| ジャ   |
| しょ   |
| ズの   |
| た資   |
| つい   |
| でし   |
| です   |
| での   |
| てま   |
| て説   |
| て類   |
| とし   |
| とめ   |
| につ   |
| に対   |
| のラ   |
| の基   |
| の天   |
| の文   |
| の発   |
| の社   |
| の言   |
| の資   |
| はジ   |
| は晴   |
| は自   |
| は雨   |
| ブに   |
| ます   |
| まと   |
| めた   |
| も晴   |
| も雨   |
| ャズ   |
| ょう   |
| ライ   |
| れで   |
| を勉   |
| を説   |
| 今日   |
| 会で   |
| 似文   |
| 先の   |
| 内自   |
| 処理   |
| 勉強   |
| 務先   |
| 勤務   |
| 基本   |
| 天気   |
| 対応   |
| 強し   |
| 強会   |
| 応し   |
| 推薦   |
| 数の   |
| 文書   |
| 料で   |
| 料は   |
| 日の   |
| 明し   |
| 明日   |
| 晴れ   |
| 書は   |
| 書推   |
| 本と   |
| 本を   |
| 気は   |
| 気も   |
| 然言   |
| 理の   |
| 理勉   |
| 発を   |
| 発表   |
| 社内   |
| 自然   |
| 薦に   |
| 表資   |
| 複数   |
| 言語   |
| 語に   |
| 語処   |
| 説明   |
| 資料   |
| 開発   |
| 雨で   |
| 類似   |
+--------+
139 rows in set (0.00 sec)

mysql> EXIT ⏎
Bye
vagrant@ubuntu2204 ~ $

目次に戻る