Help us understand the problem. What is going on with this article?

MySQL 日本語全文検索について

More than 3 years have passed since last update.

全文検索とは

・全文検索とは、複数の文書ファイルから特定の文字列(キーワード)を検索する技術を指します。
・特定の文字列(キーワード)をあらかじめ索引情報(インデックス化)を準備する事で、検索を高速化する事が出来ます。

テキスト情報の抽出方法

方式 (Index)速度 検索速度 分かち書き単語数 検索漏れ デメリット
N-Gram 早い 普通 多い 無し 関連性が低い
Mecab 遅い 早い 少ない 有り 辞書の更新

例)東京都で、豊島さんの結婚式だよ。

◆N-Gram(バイグラム)

東京
京都
都で
で、
、豊
豊島
島さ
さん
んの
の結
結婚
婚式
式だ
だよ
よ。

◆mecab

fwww01:/usr/local/src/mecab-ipadic-2.7.0-20070801> mecab
東京 名詞,固有名詞,地域,一般,,,東京,トウキョウ,トーキョー
都 名詞,接尾,地域,,,,都,ト,ト
で 助詞,格助詞,一般,
,,,で,デ,デ
、 記号,読点,,,,,、,、,、
豊島 名詞,固有名詞,人名,姓,,,豊島,トシマ,トシマ
さん 名詞,接尾,人名,,,,さん,サン,サン
の 助詞,連体化,
,,,,の,ノ,ノ
結婚式 名詞,一般,
,,,,結婚式,ケッコンシキ,ケッコンシキ
だ 助動詞,
,,,特殊・ダ,基本形,だ,ダ,ダ
よ 助詞,終助詞,,,,,よ,ヨ,ヨ
。 記号,句点,,,,,。,。,。

■MySQL 5.7.6以降より、標準でngram Full-Text Parser Pluginもしくは、MeCab Full-Text Parser Pluginを利用出来るようになりました。
http://qiita.com/terukizm/items/858bd63daa2c4dba7829

◆ngram

my.cnf
[mysqld]
innodb_ft_min_token_size=2

>ALTER TABLE people ADD FULLTEXT KEY (nickname) WITH PARSER ngram;
>ALTER TABLE people ADD FULLTEXT KEY (nickname, self_introduction) WITH PARSER ngram;

◆形態素解析(MeCab)

my.cnf
[mysqld]

MeCab Full-Text Parser Plugin Settings

loose-mecab-rc-file=/etc/mecabrc
innodb_ft_min_token_size=2

mysql> INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
Query OK, 0 rows affected (0.14 sec)

mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| mecab | ACTIVE | FTPARSER | libpluginmecab.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+

mysql> SHOW STATUS LIKE 'mecab_charset';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| mecab_charset | utf8 |
+---------------+-------+

vi /etc/mecabrc

変更

;dicdir = /usr/lib64/mecab/dic/ipadic
dicdir = /usr/lib64/mysql/mecab/dic/ipadic_euc-jp

mysql> SHOW STATUS LIKE 'mecab_charset';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| mecab_charset | ujis |
+---------------+-------+

ALTER TABLE people ADD FULLTEXT INDEX idx_nickname (nickname) WITH PARSER mecab;

構文

■全文検索種類

・自然言語検索
>IN NATURAL LANGUAGE MODE
・ブール検索
>IN BOOLEAN MODE

mysql> select nickname from people where match(nickname) against ('"日暮里"' in NATURAL LANGUAGE MODE);
+---------------------+
| nickname |
+---------------------+
| 日暮里 |
| 日暮里 |
| 日暮里 |
| 日暮里最高 |
| ピエール新日暮里3世 |
| 日暮 里吉 |
| 日暮かごめ |
| 日暮かごめ |
| 日暮かごめ |
| 日暮新太郎 |
| 日暮かごめ |
| その日暮らし |
| その日暮らし |
+---------------------+
13 rows in set (0.03 sec)

mysql> select nickname from people where match(nickname) against ('"日暮里"' in boolean mode);
+---------------------+
| nickname |
+---------------------+
| 日暮里 |
| 日暮里最高 |
| ピエール新日暮里3世 |
| 日暮里 |
| 日暮里 |
+---------------------+
5 rows in set (0.00 sec)

mysql> select nickname from people where match(nickname) against ('+"日暮里" +"3世"' in boolean mode);
+---------------------+
| nickname |
+---------------------+
| ピエール新日暮里3世 |
+---------------------+
1 row in set (0.00 sec)

mysql> select nickname from people where match(nickname) against ('+"日暮里" -"3世"' in boolean mode);
+------------+
| nickname |
+------------+
| 日暮里 |
| 日暮里最高 |
| 日暮里 |
| 日暮里 |
+------------+
4 rows in set (0.00 sec)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away