「Mysql/日本語全文検索」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→mecabを使う) |
|||
| (同じ利用者による、間の1版が非表示) | |||
| 行8: | 行8: | ||
それまでは以下mroongaでしか使えなかった。 | それまでは以下mroongaでしか使えなかった。 | ||
| − | ==ngram2での検索サンプル== | + | ==ngram2== |
| + | 問題点:1文字検索がhitしない。 | ||
| + | ===ngram2での検索サンプル=== | ||
CREATE TABLE diaries ( | CREATE TABLE diaries ( | ||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, | id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, | ||
| 行18: | 行20: | ||
SELECT * FROM diaries WHERE MATCH(content) AGAINST('+晴れ' IN BOOLEAN MODE); | SELECT * FROM diaries WHERE MATCH(content) AGAINST('+晴れ' IN BOOLEAN MODE); | ||
| − | ==ngram2での検索サンプル(複数カラムの検索の場合)== | + | ===ngram2での検索サンプル(複数カラムの検索の場合)=== |
CREATE TABLE diaries ( | CREATE TABLE diaries ( | ||
id INT PRIMARY KEY AUTO_INCREMENT, | id INT PRIMARY KEY AUTO_INCREMENT, | ||
| 行31: | 行33: | ||
SELECT * FROM diaries WHERE MATCH(fulltext_column) against('+曇!' IN BOOLEAN MODE); | SELECT * FROM diaries WHERE MATCH(fulltext_column) against('+曇!' IN BOOLEAN MODE); | ||
| − | == | + | ==mecab== |
| + | mysql8で使えるかは微妙 | ||
| + | ===mecabを使う=== | ||
$ vi /etc/my.cnf | $ vi /etc/my.cnf | ||
[mysqld] | [mysqld] | ||
| 行42: | 行46: | ||
| mecab | ACTIVE | FTPARSER | libpluginmecab.so | GPL | | mecab | ACTIVE | FTPARSER | libpluginmecab.so | GPL | ||
| − | ==mecab検索== | + | ===mecab検索=== |
CREATE TABLE diaries_mecab | CREATE TABLE diaries_mecab | ||
( | ( | ||
2026年4月19日 (日) 04:23時点における最新版
目次
mysql5.7から日本語全文検索にも対応された
初期設定なしで、ngram2であれば使える。 mecabを入れれば分かち書きが使えるようになる。
mysql5.6までは
Mroonga [ショートカット]
それまでは以下mroongaでしか使えなかった。
ngram2
問題点:1文字検索がhitしない。
ngram2での検索サンプル
CREATE TABLE diaries (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
content Text,
FULLTEXT INDEX ftx_fulltext(content) WITH PARSER `ngram`
) ENGINE=InnoDB CHARACTER SET utf8mb4;
insert into diaries (content) values ("明日は晴れです");
insert into diaries (content) values ("明日は曇りです");
SELECT * FROM diaries WHERE MATCH(content) AGAINST('+晴れ' IN BOOLEAN MODE);
ngram2での検索サンプル(複数カラムの検索の場合)
CREATE TABLE diaries (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(64) NULL DEFAULT NULL,
content TEXT NULL,
fulltext_column TEXT AS (CONCAT(title, ' ', content)) STORED,
FULLTEXT INDEX ftx_fulltext (fulltext_column) WITH PARSER `ngram`
) ENGINE=InnoDB CHARACTER SET utf8mb4;
insert into diaries (title,content) values ("晴!", "明日は晴れです");
insert into diaries (title,content) values ("曇!", "明日は曇りです");
SELECT * FROM diaries WHERE MATCH(fulltext_column) against('+晴れ' IN BOOLEAN MODE);
SELECT * FROM diaries WHERE MATCH(fulltext_column) against('+曇!' IN BOOLEAN MODE);
mecab
mysql8で使えるかは微妙
mecabを使う
$ vi /etc/my.cnf [mysqld] loose-mecab-rc-file=/etc/mecabrc innodb_ft_min_token_size=2 $ sudo /etc/rc.d/init.d/mysqld restart mysql> INSTALL PLUGIN mecab SONAME 'libpluginmecab.so'; mysql> SHOW PLUGINS; | Name | Status | Type | Library | License | mecab | ACTIVE | FTPARSER | libpluginmecab.so | GPL
mecab検索
CREATE TABLE diaries_mecab
(
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
content TEXT,
FULLTEXT INDEX mecab_idx (content) WITH PARSER mecab
) ENGINE=InnoDB CHARACTER SET utf8mb4;
insert into diaries_mecab (content) values ("明日は晴れです");
insert into diaries_mecab (content) values ("明日は曇りです");
select * from diaries_mecab where match(content) against('晴れ');
参考
http://mysqlserverteam.com/innodb-%E5%85%A8%E6%96%87%E6%A4%9C%E7%B4%A2-mecab-parser/
