SlideShare ist ein Scribd-Unternehmen logo
1 von 12
MySQL対応全文検索システム
Mroonga(むるんが)
作成者:小越 秀
作成日:2014年9月29日
Mroongaとは
• インストールしたら、後は普通のMySQLとして
使える日本語に対応した唯一の全文検索シ
ステム
• 全文検索エンジンにTritonnの後継プロダクト
Groonga(ぐるんが)を使用
• MySQLのプラグインとして動作する
(MySQL5.1以降のプラガブルストレージエン
ジンを使用し、MySQLのバイナリに手を加え
ず動的にロードして利用可能)
• http://mroonga.org/ja/
Mroongaの特徴
• 更新内容をすぐに検索可能
• 更新中に検索性能を落とさない(更新時の排他表ロックがない)
• 高速な位置情報検索
• 日本語対応(collationの設定でひらがな、カタカナ、全角、半角の
違いを吸収できる)
• 形態素解析、N-gram、空白区切りなどのパーサーがある
• ラッパーモードを使用することで、MyISAMやInnoDBなどのストレー
ジエンジンに全文検索機能だけを追加できる
• 毎月アップデートがリリースされていて、活動が活発(最新リリース
は2014年9月29日)
• OSSで開発されているため、特定の企業の動向に依存しにくい
(https://github.com/mroonga)
全文検索システム
プロダクト名 全文検索エンジン 備考
Tritonn Senna
MySQL5.0まで対応
ストレージエンジンは
MyISAMのみ対応
Mroonga Groonga
Tritonnの後継プロダクト
MySQL5.1以降に対応
GroongaにMySQLストレー
ジエンジンを実装したもの
ストレージエンジンは
InnoDBにも対応
Mroongaを使わない場合
1. アプリ側で前処理(トークナイズ処理)をして
MyISAM/InnoDBの全文検索機能を使用する
2. Solr/Sphinxなどの別の全文検索システムを
使用する
一手間余計にかかって開発が面倒。運用も
MySQLと全文検索システムの2つを見なくては
ならない。
Mroongaのモード
1. ストレージモード(トランザクション非対応)
2. ラッパーモード(トランザクション対応。
MyISAMやInnoDBに全文検索機能だけを追
加するモード。MySQLのプラガブルストレー
ジエンジンを使用し、既存のストレージエン
ジンを変更しない。)
サポートしているプラットフォーム
• Linux x86_64(Intel64/AMD64)
サポートしているOS
• CentOS 5, 6, 7
追加でインストールするもの
• Mecab : 形態素解析で必要
• Groonga
• Mroonga
• Groongaノーマライザー
インストール方法は全て日本語で提供されて
いる。
インストール方法
% 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
使い方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を指定しなかった場
合は、 ストレージモードでテー
ブルが作成される。
使い方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の設定が効いているため.。

Weitere ähnliche Inhalte

Was ist angesagt?

情報システム部がSplunk を使うとどうなるか?
情報システム部がSplunk を使うとどうなるか?情報システム部がSplunk を使うとどうなるか?
情報システム部がSplunk を使うとどうなるか?snicker_jp
 
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」snicker_jp
 
初めてOssを読んでみた(nuke)
初めてOssを読んでみた(nuke)初めてOssを読んでみた(nuke)
初めてOssを読んでみた(nuke)友里 高島
 
Mastdonインスタンス立ててみた in Azure #ssmjp
Mastdonインスタンス立ててみた in Azure #ssmjpMastdonインスタンス立ててみた in Azure #ssmjp
Mastdonインスタンス立ててみた in Azure #ssmjpMasahiro NAKAYAMA
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Kosuke Tanabe
 

Was ist angesagt? (8)

情報システム部がSplunk を使うとどうなるか?
情報システム部がSplunk を使うとどうなるか?情報システム部がSplunk を使うとどうなるか?
情報システム部がSplunk を使うとどうなるか?
 
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
Splunk_NiteX 「ノンテクエンジニアでも、デキる!ログ解析」
 
初めてOssを読んでみた(nuke)
初めてOssを読んでみた(nuke)初めてOssを読んでみた(nuke)
初めてOssを読んでみた(nuke)
 
Mastdonインスタンス立ててみた in Azure #ssmjp
Mastdonインスタンス立ててみた in Azure #ssmjpMastdonインスタンス立ててみた in Azure #ssmjp
Mastdonインスタンス立ててみた in Azure #ssmjp
 
2 12椛澤「tokyo tyrant」
2 12椛澤「tokyo tyrant」2 12椛澤「tokyo tyrant」
2 12椛澤「tokyo tyrant」
 
オープンソースの来し方行く末@OSC 2016 Okinawa
オープンソースの来し方行く末@OSC 2016 Okinawaオープンソースの来し方行く末@OSC 2016 Okinawa
オープンソースの来し方行く末@OSC 2016 Okinawa
 
オープンソースの来し方行く末@OSC 2016 Hokkaido
オープンソースの来し方行く末@OSC 2016 Hokkaidoオープンソースの来し方行く末@OSC 2016 Hokkaido
オープンソースの来し方行く末@OSC 2016 Hokkaido
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10
 

Andere mochten auch

Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索yoyamasaki
 
mroongaで全文検索をちょっぱやにしてみた
mroongaで全文検索をちょっぱやにしてみたmroongaで全文検索をちょっぱやにしてみた
mroongaで全文検索をちょっぱやにしてみたYuya TAMANO
 
Learning CakePHP from Source Code
Learning CakePHP from Source CodeLearning CakePHP from Source Code
Learning CakePHP from Source CodeHideshi Ogoshi
 
Falcon Full Text Search Engine
Falcon Full Text Search EngineFalcon Full Text Search Engine
Falcon Full Text Search EngineHideshi Ogoshi
 
How to create test data
How to create test dataHow to create test data
How to create test dataHideshi Ogoshi
 
Mroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦いMroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦いNaoya Murakami
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!Kouhei Sutou
 
Functional programming
Functional programmingFunctional programming
Functional programmingHideshi Ogoshi
 
Introduction of Monaca
Introduction of MonacaIntroduction of Monaca
Introduction of MonacaHideshi Ogoshi
 
サーバーレスアーキテクチャのすすめ(公開版)
サーバーレスアーキテクチャのすすめ(公開版)サーバーレスアーキテクチャのすすめ(公開版)
サーバーレスアーキテクチャのすすめ(公開版)Keisuke Kadoyama
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderSadayuki Furuhashi
 
ここまで来た!2017年 Web VRでできること
ここまで来た!2017年 Web VRでできることここまで来た!2017年 Web VRでできること
ここまで来た!2017年 Web VRでできることJun Ito
 
PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!Shinichi Takahashi
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016Rui Hirokawa
 

Andere mochten auch (17)

Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索Mysql+Mroongaで全文検索
Mysql+Mroongaで全文検索
 
mroongaで全文検索をちょっぱやにしてみた
mroongaで全文検索をちょっぱやにしてみたmroongaで全文検索をちょっぱやにしてみた
mroongaで全文検索をちょっぱやにしてみた
 
Learning CakePHP from Source Code
Learning CakePHP from Source CodeLearning CakePHP from Source Code
Learning CakePHP from Source Code
 
Falcon Full Text Search Engine
Falcon Full Text Search EngineFalcon Full Text Search Engine
Falcon Full Text Search Engine
 
全文検索エンジンMroonga_エンジニア勉強会20140418
全文検索エンジンMroonga_エンジニア勉強会20140418全文検索エンジンMroonga_エンジニア勉強会20140418
全文検索エンジンMroonga_エンジニア勉強会20140418
 
Elastic searchとは_エンジニア勉強会20140212
Elastic searchとは_エンジニア勉強会20140212Elastic searchとは_エンジニア勉強会20140212
Elastic searchとは_エンジニア勉強会20140212
 
How to create test data
How to create test dataHow to create test data
How to create test data
 
Mroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦いMroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦い
 
Silex入門
Silex入門Silex入門
Silex入門
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Introduction of Monaca
Introduction of MonacaIntroduction of Monaca
Introduction of Monaca
 
サーバーレスアーキテクチャのすすめ(公開版)
サーバーレスアーキテクチャのすすめ(公開版)サーバーレスアーキテクチャのすすめ(公開版)
サーバーレスアーキテクチャのすすめ(公開版)
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
ここまで来た!2017年 Web VRでできること
ここまで来た!2017年 Web VRでできることここまで来た!2017年 Web VRでできること
ここまで来た!2017年 Web VRでできること
 
PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 

Ähnlich wie MySQL対応全文検索システムMroonga(むるんが)

Introducing mroonga 20111129
Introducing mroonga 20111129Introducing mroonga 20111129
Introducing mroonga 20111129Kentoku
 
Mroonga 20121129
Mroonga 20121129Mroonga 20121129
Mroonga 20121129Kentoku
 
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記Kentaro Yoshida
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索techtalkdwango
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 
FirefoxとMozillaでのSVGの取り組み
FirefoxとMozillaでのSVGの取り組みFirefoxとMozillaでのSVGの取り組み
FirefoxとMozillaでのSVGの取り組みMakoto Kato
 

Ähnlich wie MySQL対応全文検索システムMroonga(むるんが) (7)

Introducing mroonga 20111129
Introducing mroonga 20111129Introducing mroonga 20111129
Introducing mroonga 20111129
 
Mroonga 20121129
Mroonga 20121129Mroonga 20121129
Mroonga 20121129
 
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
MySQL 5.6への完全移行を実現したTritonnからMroongaへの移行体験記
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
Groongaの特徴
Groongaの特徴Groongaの特徴
Groongaの特徴
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
 
FirefoxとMozillaでのSVGの取り組み
FirefoxとMozillaでのSVGの取り組みFirefoxとMozillaでのSVGの取り組み
FirefoxとMozillaでのSVGの取り組み
 

MySQL対応全文検索システムMroonga(むるんが)