Contenu connexe
Similaire à MySQL対応全文検索システムMroonga(むるんが) (7)
MySQL対応全文検索システムMroonga(むるんが)
- 3. Mroongaの特徴
• 更新内容をすぐに検索可能
• 更新中に検索性能を落とさない(更新時の排他表ロックがない)
• 高速な位置情報検索
• 日本語対応(collationの設定でひらがな、カタカナ、全角、半角の
違いを吸収できる)
• 形態素解析、N-gram、空白区切りなどのパーサーがある
• ラッパーモードを使用することで、MyISAMやInnoDBなどのストレー
ジエンジンに全文検索機能だけを追加できる
• 毎月アップデートがリリースされていて、活動が活発(最新リリース
は2014年9月29日)
• OSSで開発されているため、特定の企業の動向に依存しにくい
(https://github.com/mroonga)
- 4. 全文検索システム
プロダクト名 全文検索エンジン 備考
Tritonn Senna
MySQL5.0まで対応
ストレージエンジンは
MyISAMのみ対応
Mroonga Groonga
Tritonnの後継プロダクト
MySQL5.1以降に対応
GroongaにMySQLストレー
ジエンジンを実装したもの
ストレージエンジンは
InnoDBにも対応
- 10. インストール方法
% sudo yum install centos-release-SCL
% sudo rpm -ivh
http://packages.groonga.org/centos/groonga-
release-1.1.0-1.noarch.rpm
% sudo yum makecache
% sudo yum install -y mysql55-mysql-server
% sudo yum install -y mysql55-mroonga
% sudo scl enable mysql55 "mysqladmin -u root
password 'new-password’”
% sudo yum install -y groonga-normalizer-mysql
% sudo yum install -y groonga-tokenizer-mecab
- 11. 使い方1
mysql> CREATE TABLE contents (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> title VARCHAR(255),
-> kana VARCHAR(255),
-> FULLTEXT INDEX (kana) COMMENT 'parser "TokenBigram"'
-> ) ENGINE = mroonga COMMENT = 'engine "innodb"' DEFAULT CHARSET utf8mb4
COLLATE=utf8mb4_unicode_ci;
mysql> INSERT INTO contents (title,kana) VALUES ("牛肉","ぎゅうにく");
mysql> INSERT INTO contents (title,kana) VALUES ("豚肉","ぶたにく");
mysql> INSERT INTO contents (title,kana) VALUES ("牛乳","ぎゅうにゅう");
mysql> INSERT INTO contents (title,kana) VALUES ("筍","たけのこ");
mysql> INSERT INTO contents (title,kana) VALUES ("数の子","かずのこ");
mysql> select * from contents;
+----+--------+--------------------+
| id | title | kana |
+----+--------+--------------------+
| 1 | 牛肉 | ぎゅうにく |
| 2 | 豚肉 | ぶたにく |
| 3 | 牛乳 | ぎゅうにゅう |
+----+--------+--------------------+
コメントでパーサを指定する
ENGINEはmroongaをCOMMENT
でMySQLのエンジンを指定する。
COMMENTを指定しなかった場
合は、 ストレージモードでテー
ブルが作成される。
- 12. 使い方2
mysql> SELECT * FROM contents WHERE MATCH(kana) AGAINST("ぎゅう");
+----+--------+--------------------+
| id | title | kana |
+----+--------+--------------------+
| 1 | 牛肉 | ぎゅうにく |
| 3 | 牛乳 | ぎゅうにゅう |
+----+--------+--------------------+
2 rows in set (0.02 sec)
mysql>
mysql> SELECT * FROM contents WHERE MATCH(kana) AGAINST("ニク");
+----+--------+-----------------+
| id | title | kana |
+----+--------+-----------------+
| 1 | 牛肉 | ぎゅうにく |
| 2 | 豚肉 | ぶたにく |
+----+--------+-----------------+
2 rows in set (0.02 sec)
ひらがな、カタカナが同一視されているのはMySQLのCOLLATEの設定が効いているため.。