facebook twitter hatena line email

Mroonga

提供: 初心者エンジニアの簡易メモ
2015年5月20日 (水) 03:16時点における127.0.0.1 (トーク)による版 (ページの作成:「mroongaをcentos6にmysql5.6のまま入れる方法 事前に、こちらも確認 linux/groongaインストール [ショートカット] ==既存mysql削除== s...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

mroongaをcentos6にmysql5.6のまま入れる方法

事前に、こちらも確認 linux/groongaインストール [ショートカット]

既存mysql削除

sudo yum list installed | grep mysql #削除mysql確認
sudo yum remove mysql*

mysql5.6インストール[#qe9027ca]

cd /etc/yum.repos.d/
sudo wget http://wing-net.ddo.jp/wing/6/EL6.wing.repo
sudo yum --enablerepo=wing install mysql56-server
sudo service mysqld start
sudo yum --enablerepo=wing install mysql56-mroonga

mysql接続

$ mysql -u[user] -p
  • 起動エラー1
Installing MySQL system tables.../usr/libexec/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
$ sudo yum install libaio
$ sudo yum install libaio-devel
  • 起動エラー2
$ sudo tail /var/log/mysqld.log
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
$ sudo mysql_install_db --datadir=/var/lib/mysql --user=mysql

No package mysql56-server availableとなりインストールが失敗する場合

http://wing-repo.net/wing/6/x86_64/を確認して、mysql57-serverとかに変えてみる

normalizerインストール事前設定

$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
$ sudo yum makecache

groonga-release-1.1.0-1.noarch.rpmのインストールに失敗する場合

$ rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
ファイル /etc/pki/rpm-gpg/RPM-GPG-KEY-groonga (パッケージ groonga-release-1.1.0-1.noarch から) は、パッケージ groonga-repository-1.0.0-0.noarch からのファイルと競合しています。
$ rpm -qa | grep groonga
groonga-repository-1.0.0-0.noarch
$ sudo rpm -e groonga-repository-1.0.0-0.noarch

mecabインストール

sudo yum -y install mecab mecab-devel mecab-ipadic --disablerepo=* --enablerepo=groonga

mecabが使えるか確認

$ echo  "東京都" | mecab
東京  名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
都  名詞,接尾,地域,*,*,*,都,ト,ト

groonga-tokenizer-mecabをインストール:

sudo yum install -y groonga-tokenizer-mecab

mroonga_commandのインストール

mysql> CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';

mysqlにmroongaエンジンインストール

mysql>INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';

mroongaインストール確認

mysql>show engines;
| mroonga            | YES     | CJK-ready fulltext search, column store                        | NO           | NO   | NO         |

mysql経由でmecabが使えるか確認

以下のようなエラーメッセージがでると使えてない

mysql> select mroonga_command("tokenize TokenMecab '東京都'");
ERROR 1026 (HY000): [tokenize] unknown tokenizer: <TokenMecab>

groonga-normalizer-mysqlをインストール:

sudo yum install groonga-normalizer-mysql
sudo yum install groonga-normalizer-mysql-devel

normalizerのインストール確認

select mroonga_command('normalize NormalizerAuto 東京都');
select mroonga_command('normalize NormalizerMySQLGeneralCI 東京都');
select mroonga_command('normalize NormalizerMySQLUnicodeCI 東京都');
select mroonga_command('normalize NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark 東京都');
  • NormalizerMySQLGeneralCIエラー

useでdbを指定しないと上のリストの"NormalizerMySQLGeneralCI"以後は以下エラーとなる

ERROR 1026 (HY000): [normalize] nonexistent normalizer: <NormalizerMySQLGeneralCI> 

スキーマ更新

mysql_upgrade -uroot -p

mysql再起動

sudo service mysqld restart

検索テスト

CREATE TABLE diaries (
 id INT PRIMARY KEY AUTO_INCREMENT,
 content VARCHAR(255),
 FULLTEXT INDEX (content)
) ENGINE = mroonga DEFAULT CHARSET utf8;
insert into diaries (content) values ("明日は晴れです");
insert into diaries (content) values ("明日は曇りです");
select * from diaries where match(content) against('晴れ');
| id | content               |
+----+-----------------------+
|  3 | 明日は晴れです        |

スコア表示

select *,match(content) against('明日') AS score from diaries where match(content) against('明日') order by match(content) against('明日');
| id | content               | score  |
+----+-----------------------+--------+
|  3 | 明日は晴れです        | 262145 |
|  4 | 明日は曇りです        | 262145 |


複数ワードを含む文章の検索方法

×select * from diaries where match(content) against('php開発');
○select * from diaries where match(content) against('php') AND match(content) against('開発');

mecabであらかじめ検索ワードを分かち書きをして、ANDでつなげて検索する

パーサをmecabへ変更

mysql5.5ではmy.cnfを変更することでパーサを変更はできない。

[mysqld]
mroonga_default_parser=TokenMecab

以下のようにindexにコメントをつけなければならない。

ALTER TABLE diaries DROP INDEX idx_name1; 
ALTER TABLE diaries ADD FULLTEXT INDEX idx_name1(name) COMMENT 'parser "TokenMecab"'

create tableではこのように

CREATE TABLE ~
FULLTEXT KEY `idx_name` (`name`) COMMENT 'parser "TokenMecab"'

normalizerも同時に指定する方法

CREATE TABLE ~
FULLTEXT KEY `idx_name` (`name`) COMMENT 'parser "TokenMecab", normalizer "NormalizerAuto"'

参考 http://dfcblog.net/2013/02/mroonga%E3%81%A7mecab%E3%82%92%E4%BD%BF%E3%81%86%E9%9A%9B%E3%81%AB%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F%E8%A9%B1.html

log

$ sudo vi /var/lib/mysql/groonga.log

Unknown storage engine 'mroonga'のエラー

$ /etc/rc.d/init.d/mysqld startでスタートしていれば $ /etc/rc.d/init.d/mysqld stopとし
$ service mysqld start #再度startする

NormalizerMySQLGeneralCIが使えないエラー

ERROR 138 (HY000): NormalizerMySQLGeneralCI normalizer isn't found for utf8_general_ci. Install groonga-normalizer-mysql normalizer. NormalizerAuto is used as fallback.
> select mroonga_command('normalize NormalizerMySQLGeneralCI 東京都');

が使えるか確認しよう。

crontabが使えなくなる?

wingリポジトリ修正
vi /etc/yum.repos.d/EL6.wing.repo
enabled=0をenabled=1へ

renameでエラー

テーブルをrenameをすると以下エラーとなり検索できないので注意。

エラーERROR 1191 (HY000): Can't find FULLTEXT index matching the column list

(追記201502:renameしても問題なくなってた)

カラム名変更時の注意

エラーになるのでAlter Changeは使わないように。(alter の add,dropはok) [2015/2時点]

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    51

参照

MySQL5.5でMroonga http://nob-log.info/2013/04/25/upgrade-to-mysql5-5-from-mysql5-1-the-mroonga/

MySQLで高速全文検索を実現するMroongaでTokenMeCabが使えないときの対処方法 http://qiita.com/groonga/items/58220bfa6b2a990f5cd2