ここの手順で Ubuntu の設定をすると MySQL データベース管理システムがインストールされています.このページでは MySQL を使った検索方法などを確認しよう.
前のページで作成した 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 のフルテキストインデックスを利用した全文検索の例を示します.例えば「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文字の場合にどのような結果になるか検証します.検索ワードを「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 ~ $