facebook twitter hatena line email

「Mroonga」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(Admin がページ「Linux/mroongaインストール」を「Mroonga」に移動しました)
 
行1: 行1:
mroongaをcentos6にmysql5.6のまま入れる方法
+
[[mroonga/インストール]]
  
事前に、こちらも確認
+
[[mroonga/旧インストール]]
[[linux/groongaインストール]] [ショートカット]
+
  
==既存mysql削除==
+
[[mroonga/検索]]
sudo yum list installed | grep mysql #削除mysql確認
+
sudo yum remove mysql*
+
  
==mysql5.6インストール==
+
[[mroonga/バックアップ・リストア]]
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
+
 
+
==ha_mroonga.so: undefined symbolエラー==
+
mroongaとgroongaが同一のバージョンでない可能性があるのでgroongaのバージョンを確認する
+
mysql > INSTALL PLUGIN Mroonga SONAME 'ha_mroonga.so';
+
ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_mroonga.so' (errno: 2 /usr/lib64/mysql/plugin/ha_mroonga.so: undefined symbol: grn_ii_estimate_size_for_lexicon_cursor)
+
$ groonga --version
+
 
+
==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: <<nowiki />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: <<nowiki />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
+
 
+
==バックアップとリストア==
+
ストレージモード(書き込みロック)
+
mysqldump --database project1 --default-character-set=utf8 --lock-all-tables > project1.sql
+
ラッパーモード(オンラインバックアップ可能)
+
mysqldump --database project1 --default-character-set=utf8 --single-transaction > project1.sql
+
リストアはmysql同様
+
mysql -uuser1 < project.sql
+
 
+
参考:http://www.slideshare.net/yoku0825/how-to-backup-your-mroonga-database?ref=http://tech.gmo-media.jp/post/97046711949/conoha-presents-groonga-how-to-talks
+
 
+
==log==
+
$ sudo tail -f /var/lib/mysql/groonga.log
+
$ sudo tail -f /var/log/message | grep mroonga
+
 
+
==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 東京都');
+
が使えるか確認しよう。
+
 
+
==ERROR 1016 (HY000): offset out of range ==
+
selectでこのエラーが出たらDBが壊れています。
+
 
+
参考:https://teratail.com/questions/10468
+
 
+
==ERROR 1016 (HY000): mroonga: failed to open table==
+
selectでこのエラーが出たらDBが壊れています。
+
 
+
==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
+

2015年6月2日 (火) 15:40時点における最新版

mroonga/インストール

mroonga/旧インストール

mroonga/検索

mroonga/バックアップ・リストア