MySQLのMecabで2020年7月以降の高速バス関連でつぶやかれているワードをピックアップしてみた

含まれている単語からノイズを除外して10000回以上つぶやかれている単語をピックアップして、その中から、再開という単語を選択して確認してみた。

NO.1ツイート


*************************** 1. row ***************************
    text: RT @kamoseaOfficial: 〈高速バスセットプラン販売再開のお知らせ〉本日より東京・千葉・君津から発着の3路線の便利な高速バスセットプランを販売再開しました。お近くのターミナルから、新幹線や飛行機からもぐっと身近に!https://t.co/0GltjR…
count(*): 71

確認方法

1) 単語を抽出
2) 選択した単語からTweetを抽出


[ec2-user@ ~]$ mysql -u root -p -e "select rank() OVER(ORDER BY count(*) desc) ranking,WORD,count(*) from FTS_WORD_TABLE where length(WORD) > 4 group by WORD having count(*) >= 10000 order by ranking";
Enter password: 
+---------+-----------+----------+
| ranking | WORD      | count(*) |
+---------+-----------+----------+
|       1 | バス      |   125194 |
|       2 | 高速      |    99663 |
|       3 | から      |    39348 |
|       4 | https     |    38086 |
|       5 | ます      |    27354 |
|       6 | ない      |    21659 |
|       7 | です      |    21414 |
|       8 | 運行      |    19084 |
|       9 | 東京      |    14653 |
|      10 | する      |    14406 |
|      11 | コロナ    |    13539 |
|      12 | まし      |    11307 |
|      13 | 再開      |    11170 |
|      14 | いる      |    10449 |
+---------+-----------+----------+
[ec2-user@ ~]$ 



[ec2-user@ ~]$ mysql -u root -p -e "select replace(replace(replace(left(text,50),'\)r\n',''),'\r',''),'\n','') as text,count(*) from FTS_Tweets WHERE MATCH (text) AGAINST ('+再開' IN BOOLEAN MODE) and tweet_time >= '2020-07-01 00:00:00' group by text order by count(*) desc limit 50";
Enter password: 
+------------------------------------------------------------------------------------------------------------------------------+----------+
| text                                                                                                                         | count(*) |
+------------------------------------------------------------------------------------------------------------------------------+----------+
| RT @kamoseaOfficial: 〈高速バスセットプラン販売再開のお知らせ〉本日より東京                                                  |       71 |
| RT @mainichiphoto: 西日本鉄道は新型コロナウイルスの影響で4月から運休していた福岡                                             |       41 |
| RT @mainichi: 西日本鉄道は福岡・北九州―東京間の夜行高速バス「はかた号」に新型車両2台                                        |       38 |
| RT @nkkyushuokinawa: 博多―東京を北九州経由で結ぶ #西鉄 の高速夜行バス「 #                                                   |       36 |
| RT @kyoto_dramakan: 新型コロナウイルス感染症の影響で運休していた、京阪バスのみつ                                             |       31 |
| RT @db_serviceinfo: 【都市間バス運休便の一部運行再開について】新型コロナウイル                                               |       29 |
| RT @OITABUS10: 新型コロナウイルスの影響で運休や減便をしておりました高速・特急バスです                                        |       23 |
| RT @chunichi_tokai: 遠州鉄道は十五日、高速バス「イーライナー」の渋谷・新宿線の運                                             |       23 |
| RT @FHFamily2019Rg: 〔緊急〕#中国バス夜行高速乗合バス【広島・福山⇔東京(東京                                                  |       16 |
| RT @CHUOBUS_JP: (7月10日 ~当面の間) 都市間高速バス運休便の一部運行再開につい                                             |       16 |
| RT @r_tsubame: 九州南部豪雨における人吉営業所管内の路線バス及び高速バスひとよし号の運                                        |       15 |
| RT @nishinippon_dsg: 大分道通行止め解除で福岡―大分路線は順次運行再開 西鉄グル                                              |       15 |
| RT @takehara_city: 【高速バスかぐや姫号の運行状況】(7月7日6時20分)山陽自                                                   |       12 |
| RT @FHFamily2019Rg: 〔緊急〕#中国バス高速乗合バス【広島⇔福岡】線『広福ライナ                                                |       11 |
| RT @hankyubus_info: 【高速バス】新型コロナウイルスの影響に伴う運行状況(一部路線                                             |       11 |
| RT @hankyubus_info: 【高速バス】新型コロナウイルスの影響に伴う運行状況(一部路線                                             |       10 |
| RT @tottori_bousai: 7月7日(火)高速バス運行再開情報日本交通株式会社より入                                                   |        9 |
| RT @Centrairairport: 【新型コロナウイルス関連情報】セントレア発着の交通機関に                                                |        9 |
| RT @nnrhbus_info: 福岡・福岡空港~阿蘇線「ASOエクスプレス」が2020年7月18                                                     |        9 |
| RT @sanyo_bus3715: 四国高速バスさまがおっしゃる通り、バスは動いてる時が一番幸せで                                            |        9 |
| RT @sanyo_bus3715: 【お知らせ】昼間高速バス「神戸~徳島線」の運行再開について新                                              |        8 |
| RT @shinkeisei_info: 運休中の高速バス新松戸駅・松戸駅~羽田空港線の運行を7/1                                                 |        8 |
| RT @Ryo_R158: 濃飛バス高速・特急…東海北陸道が復旧していることから、名古屋線・大阪                                           |        8 |
| RT @iyotetsu2017: いよ子です。今月から順次、いよてつ高速バスは、全路線の運行を再                                             |        8 |
| RT @utynews: 約3か月ぶり 竜王・甲府‐羽田空港 高速バス再開 https://t.co                                                   |        8 |
| RT @FHFamily2019Rg: 夜行高速乗合バス【広島・福山⇔東京(東京ドーム・大崎)】線『                                                 |        7 |
| RT @hankyubus_info: 【高速バス】新型コロナウイルスの影響に伴う運行状況(一部路線                                             |        7 |
| RT @761morning: 7/8 #トポモ #DailyScrapbook📒西鉄高速バス                                                                       |        7 |
| RT @iyotetsu2017: いよ子です。今月から順次、いよてつ高速バスは、全路線の運行を再                                             |        7 |
| RT @miraikun610: 京阪バス、高速バスを7月17日運行再開。枚方、亀岡、有馬温泉、米子                                             |        7 |
| RT @KintetsuBus: 【高速バス運行再開情報】近鉄バスでは、高速バスの運行を順次再開し                                            |        6 |
| RT @mainichi_houdou: 西日本鉄道は1日、新型コロナウイルスの影響で4月から運休し                                                |        6 |
| RT @fminyu: 福島交通「高速バス」一部再開へ 競馬場・福島-仙台など4路線#新型コロナウ                                        |        6 |
| RT @travelwatch_jp: 京阪バス、高速バスを7月17日運行再開。枚方、亀岡、有馬温泉                                                |        6 |
| RT @yokotanaka1972: 高山線の高山~下呂の長期運休は、ニュース画像を素人目に見て、                                             |        6 |
| RT @kotsu_TR: 【交通新聞電子版 トピックスニュース】7/15西鉄 福岡~東京の夜行高                                              |        6 |
| RT @FHFamily2019Rg: 〔続報〕夜行高速乗合バス【広島⇔東京】線『ニューブリーズ』運                                             |        6 |
| RT @iwakunibus: 7/1 11時配信岩国~広島高速バスは7/18(土)より、下記の便                                                     |        5 |
| RT @fukutetsubus: 【高速バス運行情報】新型コロナウイルス感染症の影響により運休中                                             |        5 |
| RT @iyotetsu2017: いよ子です。今月から順次、いよてつ高速バスは、全路線の運行を再                                             |        5 |
| RT @sanyo_bus3715: 四国高速バスさまがおっしゃる通り、バスは動いてる時が一番幸せで                                            |        5 |
| RT @entetsubambi: 【長島温泉リゾートライナー申込受付開始!!!】遠鉄高速バスe                                                |        5 |
| RT @utynews: きょうもスゴろくのニュースをご覧ください。昨夜のVF甲府の振り返り、コロナ                                      |        5 |
| RT @matudoramen: 運休されていた松戸ディズニー間の高速バス7月16日から順次再                                                   |        4 |
| RT @FHFamily2019Rg: 〔緊急〕#防長交通夜行高速乗合バス【萩・山口湯田・徳山・岩                                                   |        4 |
| RT @KitaibarakiCity: 高速バス「いわき・北茨城⇔東京」線の一部ダイヤの運航再開に                                              |        4 |
| RT @becchy9547: 【富山地鉄HP】高速バス「金沢・富山=山形・仙台線」7/17(金)金                                               |        4 |
| RT @nnrhbus_unkou: (7/10 16:28 現在)<運行再開>●高                                                                     |        4 |
| RT @nnrhbus_unkou: (7/10 18:16 現在)<運行再開>●高                                                                     |        4 |
| RT @iyotetsu2017: いよ子です。伊予鉄バスの高速バスは、順次全路線の運行を再開いた                                             |        4 |
+------------------------------------------------------------------------------------------------------------------------------+----------+
[ec2-user@~]$ 



MySQLのMECABによる最近つぶやかれている単語の解析

MySQLのMecabプラグインを利用して集計したデータを解析する過程で、INNODB_FT_INDEX_TABLEにて含まれている単語を確認し集計しようとしたが、
サーバーのスペックが低く集計中にハングしてしまったので、メモリーのINNODB_FT_INDEX_TABLEの内容をInnoDBテーブルに落として集計してみた。
もし、同様に形態素解析で解析されたワードを集計したいけれども、メモリー量が不足していて単語を集計出来ない場合の回避策として。参考までに。


root@localhost [(none)]> desc INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| WORD         | varchar(337)        | NO   |     |         |       |
| FIRST_DOC_ID | bigint(21) unsigned | NO   |     |         |       |
| LAST_DOC_ID  | bigint(21) unsigned | NO   |     |         |       |
| DOC_COUNT    | bigint(21) unsigned | NO   |     |         |       |
| DOC_ID       | bigint(21) unsigned | NO   |     |         |       |
| POSITION     | bigint(21) unsigned | NO   |     |         |       |
+--------------+---------------------+------+-----+---------+-------+
6 rows in set (0.03 sec)

root@localhost [confirm]> show create table INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE\G
*************************** 1. row ***************************
       Table: INNODB_FT_INDEX_TABLE
Create Table: CREATE TEMPORARY TABLE `INNODB_FT_INDEX_TABLE` (
  `WORD` varchar(337) NOT NULL DEFAULT '',
  `FIRST_DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
  `LAST_DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
  `DOC_COUNT` bigint unsigned NOT NULL DEFAULT '0',
  `DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
  `POSITION` bigint unsigned NOT NULL DEFAULT '0'
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.06 sec)

メモリーのINNODB_FT_INDEX_TABLEからInnoDBのテーブルにデータをコピーする


root@localhost [(confirm)]> SET GLOBAL innodb_ft_aux_table='APP/Tweets';
Query OK, 0 rows affected (0.00 sec)

root@localhost [(confirm)]> SET GLOBAL innodb_optimize_fulltext_only=ON;optimize table Tweets;
Query OK, 0 rows affected (0.00 sec)

root@localhost [confirm]> CREATE TEMPORARY TABLE `FTS_INDEX_TABLE` (
    ->   `WORD` varchar(337) NOT NULL DEFAULT '',
    ->   `FIRST_DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
    ->   `LAST_DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
    ->   `DOC_COUNT` bigint unsigned NOT NULL DEFAULT '0',
    ->   `DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
    ->   `POSITION` bigint unsigned NOT NULL DEFAULT '0'
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.01 sec)


root@localhost [confirm]> insert into FTS_INDEX_TABLE select * from INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;
Query OK, 11642045 rows affected (12 min 51.51 sec)
Records: 11642045  Duplicates: 0  Warnings: 0


オーバーヘッド
MEMORYからデータのコピー中はサーバースペックも低いのでメモリー+SWAPが最大限に利用されている。
時間も上記のように12分もかかってしまいました。

メモ:再集計する時に、TRUNCATEするのでTEMPORARYのままでもいいけど、念のためInnoDB間のみでデータコピー速度を確認してみた。
こちらは、1分半程度で終わっています。


root@localhost [confirm]> CREATE TABLE `FTS_WORD_TABLE` (
    ->   `WORD` varchar(337) NOT NULL DEFAULT '',
    ->   `FIRST_DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
    ->   `LAST_DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
    ->   `DOC_COUNT` bigint unsigned NOT NULL DEFAULT '0',
    ->   `DOC_ID` bigint unsigned NOT NULL DEFAULT '0',
    ->   `POSITION` bigint unsigned NOT NULL DEFAULT '0'
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.01 sec)

root@localhost [confirm]> insert into FTS_WORD_TABLE select * from FTS_INDEX_TABLE;
Query OK, 11642045 rows affected (1 min 29.70 sec)
Records: 11642045  Duplicates: 0  Warnings: 0

TWEETワードランキング
以下、直近のTweet集計結果です。コロナの影響もあり、殆どがコロナ関連の単語が上位にきている事が分かります。


root@localhost [confirm]> select rank() OVER(ORDER BY count(*) desc) ranking,WORD,count(*) 
    -> from FTS_WORD_TABLE where length(WORD) > 4 group by WORD having count(*) >= 10000 order by ranking;
+---------+-----------------+----------+
| ranking | WORD            | count(*) |
+---------+-----------------+----------+
|       1 | ウイルス        |   282891 |
|       2 | コロナ          |   232527 |
|       3 | 新型            |   173684 |
|       4 | 感染            |   157965 |
|       5 | https           |   137958 |
|       6 | ます            |   101664 |
|       7 | ない            |    97355 |
|       8 | から            |    81599 |
|       9 | する            |    70057 |
|      10 | こと            |    66332 |
|      11 | まし            |    65643 |
|      12 | いる            |    64802 |
|      13 | です            |    62606 |
|      14 | 拡大            |    43248 |
|      15 | バス            |    40119 |
|      16 | 日本            |    31022 |
|      17 | ある            |    29622 |
|      18 | 対策            |    29344 |
|      19 | ため            |    28480 |
|      20 | この            |    25914 |
|      21 | 中国            |    24729 |
|      22 | てる            |    24267 |
|      23 | など            |    23112 |
|      24 | まで            |    22573 |
|      25 | という          |    22429 |
|      26 | よう            |    22123 |
|      27 | 検査            |    21856 |
|      28 | なっ            |    20436 |
|      29 | 医療            |    20188 |
|      30 | 東京            |    19908 |
|      31 | これ            |    18426 |
|      32 | 影響            |    18350 |
|      33 | 確認            |    18141 |
|      34 | ので            |    17266 |
|      35 | あり            |    17175 |
|      36 | さん            |    16897 |
|      37 | について        |    16705 |
|      38 | ませ            |    16701 |
|      39 | たら            |    16575 |
|      40 | マスク          |    16337 |
|      41 | なり            |    16270 |
|      42 | 緊急            |    16173 |
|      43 | より            |    15770 |
|      44 | なく            |    15662 |
|      45 | 防止            |    15512 |
|      46 | 受け            |    15471 |
|      47 | 世界            |    15462 |
|      48 | って            |    15407 |
|      49 | けど            |    15108 |
|      50 | 発表            |    14998 |
|      51 | として          |    14969 |
|      52 | 政府            |    14914 |
|      53 | れる            |    14863 |
|      54 | yahoonewstopics |    14258 |
|      55 | なる            |    14207 |
|      56 | 自粛            |    12808 |
|      57 | その            |    12730 |
|      58 | 情報            |    12621 |
|      59 | 事態            |    12430 |
|      60 | だけ            |    12010 |
|      61 | 武漢            |    11872 |
|      62 | お知らせ        |    11751 |
|      63 | そう            |    11453 |
|      64 | できる          |    11284 |
|      65 | による          |    11218 |
|      66 | でき            |    11120 |
|      67 | 開催            |    11085 |
|      68 | たい            |    10899 |
|      69 | 宣言            |    10855 |
|      70 | でも            |    10801 |
|      71 | ニュース        |    10720 |
|      72 | 状況            |    10663 |
|      73 | 中止            |    10641 |
|      74 | 新た            |    10626 |
|      75 | おり            |    10507 |
|      76 | 患者            |    10391 |
|      77 | だっ            |    10352 |
|      78 | なら            |    10304 |
|      79 | 時間            |    10096 |
|      80 | 対応            |    10093 |
|      81 | 病院            |    10092 |
+---------+-----------------+----------+
81 rows in set (26.52 sec)

root@localhost [confirm]> 

参考: Windows関数 on MySQL


最近、MySQL5.7の形態素解析エンジンのmecabに関して辞書をカスタマイズ出来るかどうか
聞かれる事が増えた為、mecabの辞書をカスタマイズしてきちんと動作確認してみました。
結論としては、問題無くカスタマイズした辞書も利用出来るようです。
但し、MySQLのマニュアルページを見る限り、MySQL Binaryから提供されているmecab辞書の利用を推奨しているようです。

【以下、抜粋】
Installing MeCab From Source (Optional)
https://dev.mysql.com/doc/refman/5.7/en/fulltext-search-mecab.html
The mecab and mecab-ipadic packages distributed with the MySQL binary are recommended but
if you want to build mecab and mecab-ipadic from source, basic installation steps are provided below.
For additional information, refer to the MeCab documentation.

前回のmecab基本検証
http://variable.jp/2015/04/10/creating-index-with-utf8mb4-on-mecab-with-5-7-7/

基本的には、MySQLのmecab辞書は特に手を加えていないようです
MySQLのコンパイル済みTarからインストールした場合のファイル

 
[root@misc02 admin]# ls -l /usr/local/mysql/lib/mecab/dic/ipadic_utf-8
合計 51828
-rw-r--r--. 1 root mysql   262496 11月  6 23:18 char.bin
-rw-r--r--. 1 root mysql      693 11月  6 23:18 dicrc
-rw-r--r--. 1 root mysql    55910 11月  6 23:18 left-id.def
-rw-r--r--. 1 root mysql  3463716 11月  6 23:18 matrix.bin
-rw-r--r--. 1 root mysql     1477 11月  6 23:18 pos-id.def
-rw-r--r--. 1 root mysql     6241 11月  6 23:18 rewrite.def
-rw-r--r--. 1 root mysql    55910 11月  6 23:18 right-id.def
-rw-r--r--. 1 root mysql 49199027 11月  6 23:18 sys.dic
-rw-r--r--. 1 root mysql     5690 11月  6 23:18 unk.dic

MecabサイトからIPA辞書をダウンロードしてインストールした場合(手を加えていない場合)

[root@misc02 admin]# ls -l /usr/local/lib/mecab/dic/ipadic
合計 51828
-rw-r--r--. 1 root root   262496  4月  4 11:36 char.bin
-rw-r--r--. 1 root root      693  4月  4 11:36 dicrc
-rw-r--r--. 1 root root    55910  4月  4 11:36 left-id.def
-rw-r--r--. 1 root root  3463716  4月  4 11:36 matrix.bin
-rw-r--r--. 1 root root     1477  4月  4 11:36 pos-id.def
-rw-r--r--. 1 root root     6241  4月  4 11:36 rewrite.def
-rw-r--r--. 1 root root    55910  4月  4 11:36 right-id.def
-rw-r--r--. 1 root root 49199027  4月  4 11:36 sys.dic
-rw-r--r--. 1 root root     5690  4月  4 11:36 unk.dic
[root@misc02 admin]# 

ここから、実際に辞書を登録して新規ワードが追加された辞書を登録しています。
※ 事前にnkf等で辞書をUTF-8に変換していますが、ここでは説明を割愛してあります。

【辞書の追加】2つの名詞のみを登録
今回は、”日本オラクル株式会社”と”mecabプラグイン”の二つのみ登録して確認

[root@misc02 mecab]# cat user_defined_dictionary_utf8.csv 
日本オラクル株式会社,1285,1285,5078,名詞,一般,*,*,*,*,日本オラクル株式会社,ニホンオラクルカブシキガイシャ,ニホンオラクルカブシキガイシャ
mecabプラグイン,1285,1285,5699,名詞,一般,*,*,*,*,mecabプラグイン,メカブプラグイン,メカブプラグイン,和布蕪プラグイン
[root@misc02 mecab]# cp -rp user_defined_dictionary_utf8.csv mecab-ipadic-2.7.0-20070801/
[root@misc02 mecab]#

user_defined_dictionary_utf8.csvが作成した追加の辞書ファイル
2文字のみ登録しているので、2文字インデックシングされた事が以下のアウトプットから確認出来る。

[root@misc02 mecab-ipadic-2.7.0-20070801]# /usr/local/libexec/mecab/mecab-dict-index -f utf-8 -t utf-8
reading ./unk.def ... 40
emitting double-array: 100% |###########################################| 
./model.def is not found. skipped.
reading ./Adj.csv ... 27210
reading ./Adnominal.csv ... 135
reading ./Adverb.csv ... 3032
reading ./Auxil.csv ... 199
reading ./Conjunction.csv ... 171
reading ./Filler.csv ... 19
reading ./Interjection.csv ... 252
reading ./Noun.adjv.csv ... 3328
reading ./Noun.adverbal.csv ... 795
reading ./Noun.csv ... 60477
reading ./Noun.demonst.csv ... 120
reading ./Noun.nai.csv ... 42
reading ./Noun.name.csv ... 34202
reading ./Noun.number.csv ... 42
reading ./Noun.org.csv ... 16668
reading ./Noun.others.csv ... 151
reading ./Noun.place.csv ... 72999
reading ./Noun.proper.csv ... 27327
reading ./Noun.verbal.csv ... 12146
reading ./Others.csv ... 2
reading ./Postp-col.csv ... 91
reading ./Postp.csv ... 146
reading ./Prefix.csv ... 221
reading ./Suffix.csv ... 1393
reading ./Symbol.csv ... 208
reading ./Verb.csv ... 130750
reading ./user_defined_dictionary_utf8.csv ... 2
emitting double-array: 100% |###########################################| 
reading ./matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################| 

done!
[root@misc02 mecab-ipadic-2.7.0-20070801]# make install
make[1]: ディレクトリ `/home/admin/mecab/mecab-ipadic-2.7.0-20070801' に入ります
make[1]: `install-exec-am' に対して行うべき事はありません.
/bin/sh ./mkinstalldirs /usr/local/lib/mecab/dic/ipadic
 /bin/install -c -m 644 ./matrix.bin /usr/local/lib/mecab/dic/ipadic/matrix.bin
 /bin/install -c -m 644 ./char.bin /usr/local/lib/mecab/dic/ipadic/char.bin
 /bin/install -c -m 644 ./sys.dic /usr/local/lib/mecab/dic/ipadic/sys.dic
 /bin/install -c -m 644 ./unk.dic /usr/local/lib/mecab/dic/ipadic/unk.dic
 /bin/install -c -m 644 ./left-id.def /usr/local/lib/mecab/dic/ipadic/left-id.def
 /bin/install -c -m 644 ./right-id.def /usr/local/lib/mecab/dic/ipadic/right-id.def
 /bin/install -c -m 644 ./rewrite.def /usr/local/lib/mecab/dic/ipadic/rewrite.def
 /bin/install -c -m 644 ./pos-id.def /usr/local/lib/mecab/dic/ipadic/pos-id.def
 /bin/install -c -m 644 ./dicrc /usr/local/lib/mecab/dic/ipadic/dicrc
make[1]: ディレクトリ `/home/admin/mecab/mecab-ipadic-2.7.0-20070801' から出ます
[root@misc02 mecab-ipadic-2.7.0-20070801]# 

mecab辞書を追加前
辞書追加前は、文字が分割されて辞書登録されている

[root@misc02 mecab-ipadic-2.7.0-20070801]# echo '日本オラクル株式会社' | /usr/local/bin/mecab
日本    名詞,固有名詞,地域,国,*,*,日本,ニッポン,ニッポン
オラクル        名詞,一般,*,*,*,*,*
株式会社        名詞,一般,*,*,*,*,株式会社,カブシキガイシャ,カブシキガイシャ
EOS
[root@misc02 mecab-ipadic-2.7.0-20070801]# 

[root@misc02 mecab-ipadic-2.7.0-20070801]# echo 'mecabプラグイン' | /usr/local/bin/mecab
mecab   名詞,固有名詞,組織,*,*,*,*
プラグ  名詞,一般,*,*,*,*,プラグ,プラグ,プラグ
イン    名詞,一般,*,*,*,*,イン,イン,イン
EOS
[root@misc02 mecab-ipadic-2.7.0-20070801]# 

mecab辞書を追加後
きちんと追加したWORDが1つの単語として認識されている事が分かる

[root@misc02 mecab]# echo '日本オラクル株式会社' | /usr/local/bin/mecab
日本オラクル株式会社    名詞,一般,*,*,*,*,日本オラクル株式会社,ニホンオラクルカブシキガイシャ,ニホンオラクルカブシキガイシャ
EOS
[root@misc02 mecab]# echo 'mecabプラグイン' | /usr/local/bin/mecab
mecabプラグイン 名詞,一般,*,*,*,*,mecabプラグイン,メカブプラグイン,メカブプラグイン,和布蕪プラグイン
EOS
[root@misc02 mecab]# 

検索対象文字列
Server1とServer2で同じデータを登録してIndexingしてあります。
また、mecab辞書はmy.cnfで新規作成したmecab辞書を参照するように設定済み。

root@localhost [mecab]> select description from articles where description like '%mecab%';
+-------------------------------------------------------------------------+
| description                                                             |
+-------------------------------------------------------------------------+
| MySQL mecabプラグインの辞書を追加した場合の動作確認                     |
| MySQL mecab                                                             |
+-------------------------------------------------------------------------+
2 rows in set (0.00 sec)

root@localhost [mecab]> select description from articles where description like '%日本%';
+---------------------------------------------------------------------------+
| description                                                               |
+---------------------------------------------------------------------------+
| 日本オラクル株式会社 辞書を追加した場合の動作確認                         |
| 日本オラクル                                                              |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)

root@localhost [mecab]> 

オリジナルのmecab辞書
新規登録した単語では認識されていない。オリジナル辞書にあるmecabや日本と言った辞書で確認出来ている。

root@localhost [mecab]> OPTIMIZE TABLE articles;
+----------------+----------+----------+----------+
| Table          | Op       | Msg_type | Msg_text |
+----------------+----------+----------+----------+
| mecab.articles | optimize | status   | OK       |
+----------------+----------+----------+----------+
1 row in set (0.01 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like 'meca%';
+-------+-----------+--------+----------+
| word  | doc_count | doc_id | position |
+-------+-----------+--------+----------+
| mecab |         1 |     33 |        5 |
| mecab |         1 |     35 |        5 |
+-------+-----------+--------+----------+
2 rows in set (0.00 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like 'mecabプラグイン';
Empty set (0.01 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like '日本%';
+--------+-----------+--------+----------+
| word   | doc_count | doc_id | position |
+--------+-----------+--------+----------+
| 日本   |         1 |     34 |        0 |
| 日本   |         1 |     36 |        0 |
+--------+-----------+--------+----------+
2 rows in set (0.00 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like '日本オラクル%';
Empty set (0.01 sec)

root@localhost [mecab]> 
 

WORDを追加したmecab辞書
追加で単語が登録されているので、追加登録した辞書で文字列が検索出来ている。
サービスのニーズや流行りの言葉を登録させておく事により、ビジネスのニーズに柔軟に対応出来そうです。
大規模なサービスはSolr等の方が良いかもしれませんが、小規模~中規模のサービスには使えそうです。

root@localhost [mecab]> OPTIMIZE TABLE articles;
+----------------+----------+----------+----------+
| Table          | Op       | Msg_type | Msg_text |
+----------------+----------+----------+----------+
| mecab.articles | optimize | status   | OK       |
+----------------+----------+----------+----------+
1 row in set (0.01 sec)

root@localhost [mecab]>  SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like 'meca%';
+----------------------+-----------+--------+----------+
| word                 | doc_count | doc_id | position |
+----------------------+-----------+--------+----------+
| mecab                |         1 |     20 |        5 |
| mecabプラグイン      |         1 |     18 |        5 |
+----------------------+-----------+--------+----------+
2 rows in set (0.01 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like 'mecabプラグイン';
+----------------------+-----------+--------+----------+
| word                 | doc_count | doc_id | position |
+----------------------+-----------+--------+----------+
| mecabプラグイン      |         1 |     18 |        5 |
+----------------------+-----------+--------+----------+
1 row in set (0.00 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like '日本%';
+--------------------------------+-----------+--------+----------+
| word                           | doc_count | doc_id | position |
+--------------------------------+-----------+--------+----------+
| 日本                           |         1 |     21 |        0 |
| 日本オラクル株式会社           |         1 |     19 |        0 |
+--------------------------------+-----------+--------+----------+
2 rows in set (0.01 sec)

root@localhost [mecab]> SELECT word, doc_count, doc_id, position FROM information_schema.INNODB_FT_INDEX_TABLE where word like '日本オラクル%';
+--------------------------------+-----------+--------+----------+
| word                           | doc_count | doc_id | position |
+--------------------------------+-----------+--------+----------+
| 日本オラクル株式会社           |         1 |     19 |        0 |
+--------------------------------+-----------+--------+----------+
1 row in set (0.01 sec)

root@localhost [mecab]> 

search_output

参考:
12.9.9 MeCab Full-Text Parser Plugin
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
単語の追加方法


5.7.6 DMRではutf8mb4でのFTインデックスの作成が出来ませんでしたが、
5.7.7 RCで以下のバグ修正が行われたので、基本的なmecab設定をMySQL5.7.7RCにて確認。
今回のリリースで、5.7はRC(リリースキャンディデート)になったので、次のバージョンでGAになり色々な用途で使えるようになりそうです。

Changes in MySQL 5.7.7 (2015-04-08, Release Candidate)
InnoDB: The InnoDB MeCab full-text parser plugin now supports the eucjpms,
cp932, and utf8mb4 character sets. (Bug #20534096)

直接関係ないですが、5.7.7からはInnoDBのDefaultファイルフォーマットがBarracudaに変更されています。
Tableデータの圧縮を使う方には、手間が省けて良い変更かと思います。
http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-7.html
The innodb_file_format default value was changed to Barracuda.
The previous default value was Antelope. This change allows tables to use Compressed or Dynamic row formats.
bara

root@localhost [mecab]> select @@version;
+--------------+
| @@version    |
+--------------+
| 5.7.7-rc-log |
+--------------+
1 row in set (0.00 sec)

root@localhost [mecab]> select PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_LICENSE from information_schema.plugins where PLUGIN_NAME IN ('ngram','mecab');
+-------------+----------------+----------------+
| PLUGIN_NAME | PLUGIN_VERSION | PLUGIN_LICENSE |
+-------------+----------------+----------------+
| ngram       | 0.1            | GPL            |
| mecab       | 0.1            | GPL            |
+-------------+----------------+----------------+
2 rows in set (0.00 sec)

root@localhost [mecab]> 

root@localhost [mecab]> CREATE TABLE M_DEMO_MB4
    -> (
    -> FTS_M_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    -> title VARCHAR(100),
    -> FULLTEXT INDEX mecab_idx(title) WITH PARSER mecab
    -> ) Engine=InnoDB CHARACTER SET utf8mb4;
Query OK, 0 rows affected (0.03 sec)

root@localhost [mecab]> 

table

テストデータを入れて、全文検索の基本動作が問題無い事を確認。

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('東京都は日本の首都です'),('京都と大阪は日本の府です');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('mysql');
Query OK, 1 row affected (0.01 sec)

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('MYSQL');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('MySQL');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('マイエスキューエル');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('マイエスキューエル');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO_MB4 (title) VALUES ('まいえすきゅーえる');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> 
root@localhost [mecab]> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;
Empty set (0.01 sec)

root@localhost [mecab]> SET GLOBAL innodb_ft_aux_table="mecab/M_DEMO_MB4";
Query OK, 0 rows affected (0.00 sec)

root@localhost [mecab]> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;
+-----------------------------+--------------+-------------+-----------+--------+----------+
| WORD                        | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+-----------------------------+--------------+-------------+-----------+--------+----------+
| 東京                        |            2 |           2 |         1 |      2 |        0 |
| 日本                        |            2 |           3 |         2 |      2 |       12 |
| 首都                        |            2 |           2 |         1 |      2 |       21 |
| です                        |            2 |           3 |         2 |      2 |       27 |
| 京都                        |            3 |           3 |         1 |      3 |        0 |
| 大阪                        |            3 |           3 |         1 |      3 |        9 |
| 日本                        |            2 |           3 |         2 |      3 |       18 |
| です                        |            2 |           3 |         2 |      3 |       30 |
| mysql                       |            4 |           6 |         3 |      4 |        0 |
| mysql                       |            4 |           6 |         3 |      5 |        0 |
| mysql                       |            4 |           6 |         3 |      6 |        0 |
| マイエスキューエル          |            7 |           7 |         1 |      7 |        0 |
| マイエスキューエル                   |            8 |           8 |         1 |      8 |        0 |
| いえ                        |            9 |           9 |         1 |      9 |        3 |
| すき                        |            9 |           9 |         1 |      9 |        9 |
| える                        |            9 |           9 |         1 |      9 |       21 |
+-----------------------------+--------------+-------------+-----------+--------+----------+
16 rows in set (0.00 sec)

root@localhost [mecab]> SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本の首都' IN NATURAL LANGUAGE MODE) AS score FROM M_DEMO_MB4;
+----------+--------------------------------------+--------------------+
| FTS_M_ID | title                                | score              |
+----------+--------------------------------------+--------------------+
|        1 | 東京都は日本の首都です               |  1.178047776222229 |
|        2 | 京都と大阪は日本の府です             | 0.3624762296676636 |
|        3 | mysql                                |                  0 |
|        4 | MYSQL                                |                  0 |
|        5 | MySQL                                |                  0 |
|        6 | マイエスキューエル                   |                  0 |
|        7 | マイエスキューエル                            |                  0 |
|        8 | まいえすきゅーえる                   |                  0 |
+----------+--------------------------------------+--------------------+
8 rows in set (0.00 sec)

root@localhost [mecab]> SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本の首都' IN BOOLEAN MODE) AS score FROM M_DEMO_MB4;
+----------+--------------------------------------+-------------------+
| FTS_M_ID | title                                | score             |
+----------+--------------------------------------+-------------------+
|        1 | 東京都は日本の首都です               | 1.178047776222229 |
|        2 | 京都と大阪は日本の府です             |                 0 |
|        3 | mysql                                |                 0 |
|        4 | MYSQL                                |                 0 |
|        5 | MySQL                                |                 0 |
|        6 | マイエスキューエル                   |                 0 |
|        7 | マイエスキューエル                            |                 0 |
|        8 | まいえすきゅーえる                   |                 0 |
+----------+--------------------------------------+-------------------+
8 rows in set (0.00 sec)

root@localhost [mecab]> 


mecabプラグイン
MySQL5.7からmecabプラグインが利用出来るようになるので、基本的な動作確認をしました。
現状では、eucjpms (ujis), cp932 (sjis), and utf8 (utf8mb4)のみ対応している状態です。

mecab-pug

Mecabについて
http://ja.wikipedia.org/wiki/MeCab

参考: 
InnoDB Full-Text: MeCab Parser
http://planet.mysql.com/entry/?id=5989321

初期設定
Plugin Directoryにモジュールや設定ファイルがあります。

[root@misc01 mecab]# ls -l /usr/local/mysql/lib/
合計 800168
-rw-r--r--. 1 root mysql  21934486  2月 27 00:04 libmysqlclient.a
lrwxrwxrwx. 1 root mysql        20  2月 27 00:12 libmysqlclient.so -> libmysqlclient.so.20
lrwxrwxrwx. 1 root mysql        24  2月 27 00:12 libmysqlclient.so.20 -> libmysqlclient.so.20.0.0
-rwxr-xr-x. 1 root mysql  10071218  2月 27 00:04 libmysqlclient.so.20.0.0
lrwxrwxrwx. 1 root mysql        16  2月 27 00:12 libmysqlclient_r.a -> libmysqlclient.a
lrwxrwxrwx. 1 root mysql        17  2月 27 00:12 libmysqlclient_r.so -> libmysqlclient.so
lrwxrwxrwx. 1 root mysql        20  2月 27 00:12 libmysqlclient_r.so.20 -> libmysqlclient.so.20
lrwxrwxrwx. 1 root mysql        24  2月 27 00:12 libmysqlclient_r.so.20.0.0 -> libmysqlclient.so.20.0.0
-rw-r--r--. 1 root mysql 347907574  2月 27 00:03 libmysqld-debug.a
-rw-r--r--. 1 root mysql 438661070  2月 27 00:12 libmysqld.a
-rw-r--r--. 1 root mysql     27154  2月 27 00:03 libmysqlservices.a
-rw-r--r--. 1 root mysql    754332  2月 26 23:58 libtcmalloc_minimal.so
drwxr-xr-x. 4 root mysql        26  3月 28 08:30 mecab
drwxr-xr-x. 3 root mysql      4096  3月 28 08:30 plugin
[root@misc01 mecab]# ls -l
合計 0
drwxr-xr-x. 5 root mysql 63  3月 28 08:30 dic
drwxr-xr-x. 2 root mysql 20  3月 29 07:29 etc
[root@misc01 mecab]# pwd
/usr/local/mysql/lib/mecab
[root@misc01 mecab]# ls -l dic/
合計 12
drwxr-xr-x. 2 root mysql 4096  3月 28 08:30 ipadic_euc-jp
drwxr-xr-x. 2 root mysql 4096  3月 28 08:30 ipadic_sjis
drwxr-xr-x. 2 root mysql 4096  3月 28 08:30 ipadic_utf-8
[root@misc01 mecab]# ls -l etc/
合計 4
-rw-r--r--. 1 root mysql 379  3月 29 07:29 mecabrc
[root@misc01 mecab]# 

基本インストールと設定
mecab設定ファイル

[root@misc01 etc]# cat mecabrc 
; Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
;
; Configuration file of MeCab
;
; We have three ipadics in /path/to/mysql/lib/mecab/dic:
; ipadic_euc-jp, ipadic_sjis, and ipadic_utf8.
; you can choose any of them or use your own one.
dicdir =  /path/to/mysql/lib/mecab/lib/mecab/dic/ipadic_euc-jp
[root@misc01 etc]# vi mecabrc 
[root@misc01 etc]# cat mecabrc 
; Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
;
; Configuration file of MeCab
;
; We have three ipadics in /path/to/mysql/lib/mecab/dic:
; ipadic_euc-jp, ipadic_sjis, and ipadic_utf8.
; you can choose any of them or use your own one.
; dicdir =  /path/to/mysql/lib/mecab/lib/mecab/dic/ipadic_euc-jp
dicdir = /usr/local/mysql/lib/mecab/dic/ipadic_utf-8
[root@misc01 etc]# 


[root@misc01 plugin]# /usr/local/mysql/bin/mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.6-m16-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

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.

root@localhost [(none)]> show variables like 'plug%';
+---------------+------------------------------+
| Variable_name | Value                        |
+---------------+------------------------------+
| plugin_dir    | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+
1 row in set (0.00 sec)

root@localhost [(none)]> INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
Query OK, 0 rows affected (0.29 sec)

root@localhost [(none)]> SHOW STATUS LIKE 'mecab_charset';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| mecab_charset | utf8  |
+---------------+-------+
1 row in set (0.00 sec)

root@localhost [(none)]> show variables like 'innodb_ft_min_token_size';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_ft_min_token_size | 2     |
+--------------------------+-------+
1 row in set (0.00 sec)


root@localhost [(none)]> select PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_LICENSE from information_schema.plugins
    -> where PLUGIN_NAME = 'meCab';
+-------------+----------------+----------------+
| PLUGIN_NAME | PLUGIN_VERSION | PLUGIN_LICENSE |
+-------------+----------------+----------------+
| mecab       | 0.1            | GPL            |
+-------------+----------------+----------------+
1 row in set (0.00 sec)

root@localhost [(none)]> 

install

検証用データベース、テーブル、データの作成

root@localhost [(none)]> CREATE DATABASE `mecab` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
Query OK, 1 row affected (0.00 sec)

root@localhost [(none)]> use mecab
Database changed
root@localhost [mecab]> CREATE TABLE M_DEMO
    ->  (
    ->   FTS_M_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->   title VARCHAR(100),
    ->   FULLTEXT INDEX mecab_idx(title) WITH PARSER mecab
    ->   ) Engine=InnoDB CHARACTER SET utf8;
Query OK, 0 rows affected (0.15 sec)

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('東京都は日本の首都です'),('京都と大阪は日本の府です');
 
Query OK, 2 rows affected (0.69 sec)
Records: 2  Duplicates: 0  Warnings: 0

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('mysql');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('MYSQL');
Query OK, 1 row affected (0.01 sec)

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('MySQL');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('マイエスキューエル');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('マイエスキューエル');
Query OK, 1 row affected (0.00 sec)

root@localhost [mecab]> INSERT INTO M_DEMO (title) VALUES ('まいえすきゅーえる');
Query OK, 1 row affected (0.01 sec)

root@localhost [mecab]> 


root@localhost [mecab]> select * from M_DEMO;
+----------+--------------------------------------+
| FTS_M_ID | title                                |
+----------+--------------------------------------+
|        1 | 東京都は日本の首都です               |
|        2 | 京都と大阪は日本の府です             |
|        3 | mysql                                |
|        4 | MYSQL                                |
|        5 | MySQL                                |
|        6 | マイエスキューエル                   |
|        7 | マイエスキューエル                            |
|        8 | まいえすきゅーえる                   |
+----------+--------------------------------------+
8 rows in set (0.00 sec)

root@localhost [mecab]> SET GLOBAL innodb_ft_aux_table="mecab/M_DEMO";
Query OK, 0 rows affected (0.00 sec)

root@localhost [mecab]> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;
+-----------------------------+--------------+-------------+-----------+--------+----------+
| WORD                        | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+-----------------------------+--------------+-------------+-----------+--------+----------+
| 東京                        |            2 |           2 |         1 |      2 |        0 |
| 日本                        |            2 |           3 |         2 |      2 |       12 |
| 首都                        |            2 |           2 |         1 |      2 |       21 |
| です                        |            2 |           3 |         2 |      2 |       27 |
| 京都                        |            3 |           3 |         1 |      3 |        0 |
| 大阪                        |            3 |           3 |         1 |      3 |        9 |
| 日本                        |            2 |           3 |         2 |      3 |       18 |
| です                        |            2 |           3 |         2 |      3 |       30 |
| mysql                       |            4 |           6 |         3 |      4 |        0 |
| mysql                       |            4 |           6 |         3 |      5 |        0 |
| mysql                       |            4 |           6 |         3 |      6 |        0 |
| マイエスキューエル          |            7 |           7 |         1 |      7 |        0 |
| マイエスキューエル                   |            8 |           8 |         1 |      8 |        0 |
| いえ                        |            9 |           9 |         1 |      9 |        3 |
| すき                        |            9 |           9 |         1 |      9 |        9 |
| える                        |            9 |           9 |         1 |      9 |       21 |
+-----------------------------+--------------+-------------+-----------+--------+----------+
16 rows in set (0.00 sec)

root@localhost [mecab]> 

mecab

■ IN NATURAL LANGUAGE MODE(Text Searches)
Text searched for is converted to a union of search tokens.
  For example, ‘日本の首都’ is converted to ‘日本 の 首都’.

root@localhost [mecab]> SELECT * FROM M_DEMO WHERE MATCH(title) AGAINST('日本の首都' IN NATURAL LANGUAGE MODE);
+----------+--------------------------------------+
| FTS_M_ID | title                                |
+----------+--------------------------------------+
|        1 | 東京都は日本の首都です               |
|        2 | 京都と大阪は日本の府です             |
+----------+--------------------------------------+
2 rows in set (0.00 sec)

root@localhost [mecab]>  SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本の首都' IN NATURAL LANGUAGE MODE) AS score FROM M_DEMO;
+----------+--------------------------------------+--------------------+
| FTS_M_ID | title                                | score              |
+----------+--------------------------------------+--------------------+
|        1 | 東京都は日本の首都です               |  1.178047776222229 |
|        2 | 京都と大阪は日本の府です             | 0.3624762296676636 |
|        3 | mysql                                |                  0 |
|        4 | MYSQL                                |                  0 |
|        5 | MySQL                                |                  0 |
|        6 | マイエスキューエル                   |                  0 |
|        7 | マイエスキューエル                            |                  0 |
|        8 | まいえすきゅーえる                   |                  0 |
+----------+--------------------------------------+--------------------+
8 rows in set (0.00 sec)

■ IN BOOLEAN MODE(Text Searches)
Text searched for is converted to a phrase search.
  For example, ‘日本の首都’ is converted to ‘”日本 の 首都”‘.

root@localhost [mecab]> SELECT * FROM M_DEMO WHERE MATCH(title) AGAINST('日本の首都' IN BOOLEAN MODE);
+----------+-----------------------------------+
| FTS_M_ID | title                             |
+----------+-----------------------------------+
|        1 | 東京都は日本の首都です            |
+----------+-----------------------------------+
1 row in set (0.00 sec)

root@localhost [mecab]> SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本の首都' IN BOOLEAN MODE) AS score FROM M_DEMO;
+----------+--------------------------------------+-------------------+
| FTS_M_ID | title                                | score             |
+----------+--------------------------------------+-------------------+
|        1 | 東京都は日本の首都です               | 1.178047776222229 |
|        2 | 京都と大阪は日本の府です             |                 0 |
|        3 | mysql                                |                 0 |
|        4 | MYSQL                                |                 0 |
|        5 | MySQL                                |                 0 |
|        6 | マイエスキューエル                   |                 0 |
|        7 | マイエスキューエル                            |                 0 |
|        8 | まいえすきゅーえる                   |                 0 |
+----------+--------------------------------------+-------------------+
8 rows in set (0.00 sec)

mecab_cost

■ IN BOOLEAN MODE(Wildcard Searches)
No tokenization for the text of a wildcard search.
For example, for ‘日本の首都*’ we will search the prefix of ‘日本の首都’

root@localhost [mecab]> SELECT * FROM M_DEMO WHERE MATCH(title) AGAINST('日本*' IN BOOLEAN MODE);
+----------+--------------------------------------+
| FTS_M_ID | title                                |
+----------+--------------------------------------+
|        1 | 東京都は日本の首都です               |
|        2 | 京都と大阪は日本の府です             |
+----------+--------------------------------------+
2 rows in set (0.01 sec)

root@localhost [mecab]> SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本*' IN BOOLEAN MODE) AS score FROM M_DEMO;
+----------+--------------------------------------+--------------------+
| FTS_M_ID | title                                | score              |
+----------+--------------------------------------+--------------------+
|        1 | 東京都は日本の首都です               | 0.3624762296676636 |
|        2 | 京都と大阪は日本の府です             | 0.3624762296676636 |
|        3 | mysql                                |                  0 |
|        4 | MYSQL                                |                  0 |
|        5 | MySQL                                |                  0 |
|        6 | マイエスキューエル                   |                  0 |
|        7 | マイエスキューエル                            |                  0 |
|        8 | まいえすきゅーえる                   |                  0 |
+----------+--------------------------------------+--------------------+
8 rows in set (0.00 sec)

root@localhost [mecab]> SELECT * FROM M_DEMO WHERE MATCH(title) AGAINST('日本の首都' IN BOOLEAN MODE);
+----------+-----------------------------------+
| FTS_M_ID | title                             |
+----------+-----------------------------------+
|        1 | 東京都は日本の首都です            |
+----------+-----------------------------------+
1 row in set (0.00 sec)

root@localhost [mecab]> SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本の首都' IN BOOLEAN MODE) AS score FROM M_DEMO;
+----------+--------------------------------------+-------------------+
| FTS_M_ID | title                                | score             |
+----------+--------------------------------------+-------------------+
|        1 | 東京都は日本の首都です               | 1.178047776222229 |
|        2 | 京都と大阪は日本の府です             |                 0 |
|        3 | mysql                                |                 0 |
|        4 | MYSQL                                |                 0 |
|        5 | MySQL                                |                 0 |
|        6 | マイエスキューエル                   |                 0 |
|        7 | マイエスキューエル                            |                 0 |
|        8 | まいえすきゅーえる                   |                 0 |
+----------+--------------------------------------+-------------------+
8 rows in set (0.00 sec)


root@localhost [mecab]> SELECT * FROM M_DEMO WHERE MATCH(title) AGAINST('日本の首都*' IN BOOLEAN MODE);
Empty set (0.00 sec)

root@localhost [mecab]>  SELECT FTS_M_ID,title,MATCH (title) AGAINST('日本の首都*' IN BOOLEAN MODE) AS score FROM M_DEMO;
+----------+--------------------------------------+-------+
| FTS_M_ID | title                                | score |
+----------+--------------------------------------+-------+
|        1 | 東京都は日本の首都です               |     0 |
|        2 | 京都と大阪は日本の府です             |     0 |
|        3 | mysql                                |     0 |
|        4 | MYSQL                                |     0 |
|        5 | MySQL                                |     0 |
|        6 | マイエスキューエル                   |     0 |
|        7 | マイエスキューエル                            |     0 |
|        8 | まいえすきゅーえる                   |     0 |
+----------+--------------------------------------+-------+
8 rows in set (0.00 sec)

root@localhost [mecab]> 

■ IN BOOLEAN MODE(Phrase Searches)
A phrase search is tokenized by mecab. For example,
“日本の首都” is converted to “日本 の 首都”.

root@localhost [mecab]> SELECT * FROM M_DEMO WHERE MATCH(title) AGAINST('"日本の首都"' IN BOOLEAN MODE);
+----------+-----------------------------------+
| FTS_M_ID | title                             |
+----------+-----------------------------------+
|        1 | 東京都は日本の首都です            |
+----------+-----------------------------------+
1 row in set (0.00 sec)

root@localhost [mecab]>  SELECT FTS_M_ID,title,MATCH (title) AGAINST('"日本の首都"' IN BOOLEAN MODE) AS score FROM M_DEMO;
+----------+--------------------------------------+-------------------+
| FTS_M_ID | title                                | score             |
+----------+--------------------------------------+-------------------+
|        1 | 東京都は日本の首都です               | 1.178047776222229 |
|        2 | 京都と大阪は日本の府です             |                 0 |
|        3 | mysql                                |                 0 |
|        4 | MYSQL                                |                 0 |
|        5 | MySQL                                |                 0 |
|        6 | マイエスキューエル                   |                 0 |
|        7 | マイエスキューエル                            |                 0 |
|        8 | まいえすきゅーえる                   |                 0 |
+----------+--------------------------------------+-------------------+
8 rows in set (0.00 sec)

root@localhost [mecab]>