#全文検索とは
・全文検索とは、複数の文書ファイルから特定の文字列(キーワード)を検索する技術を指します。
・特定の文字列(キーワード)をあらかじめ索引情報(インデックス化)を準備する事で、検索を高速化する事が出来ます。
##テキスト情報の抽出方法
方式 | (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)