linux vps centos mroongaをインストールする方法

2014年3月17日更新 view: 512 view
photoBy: http://www.clear-code.com/blog/images/20111201_1.…

まずはデータベースをバックアップする

データベーステーブルもすべて消えるので、以下をヤる前に必ずバックアップを取る事。

mysqlを削除

# sudo yum remove mysql
# sudo yum remove mysql-server
# sudo yum remove mysql-libs

アンインストール。依存ファイルをチェック

# rpm -qa | grep -i mysql

出てきたゴミファイルをすべて削除

ひとつずつ削除していく。

# rpm -e mysql-server-5.0.77-4.el5_5.4

これをきっちりやらないと、競合conflictエラーだらけで再インストールできなくなる

設定

ダウンロードとインストール

まずは、 /etc/my.cnf を先に作っておく。

touch /etc/my.cnf

これをやっとかないと socket や my.cnf のパスが変わってしまい、socket error 等バグの原因になる。

順番に気をつけよう。また、リポジトリのURLがしょっちゅう変更になるので注意。
http://wing-repo.net/wing/6/x86_64/ より、あったファイルを探して、そのURLを指定。
32bit 版や 64bit 版 (x86_64) で分かれているので注意。

yum install http://wing-repo.net/wing/6/x86_64/mysql56-libs-5.6.16-1.el6_14.wing.x86_64.rpm
yum install http://wing-repo.net/wing/6/x86_64/mysql56-5.6.16-1.el6_14.wing.x86_64.rpm
yum install http://wing-repo.net/wing/6/x86_64/mysqlclient16-5.1.69-1.el6_3.wing.x86_64.rpm
yum install http://wing-repo.net/wing/6/x86_64/mysql56-server-5.6.16-1.el6_14.wing.x86_64.rpm

起動するかチェック (起動できなければ mysqld を mysql に直してみる。)

スポンサードリンク
sudo /etc/init.d/mysqld start

起動できなかったり、おかしければ

http://www.matomater.com/16225/

を参考に。

mysqlへログインして設定

# The random password set for ...の行末にあるランダムな英数字がパスワードです
$ sudo cat /root/.mysql_secret

# そのパスワードを使って認証します
$ mysql -uroot -p

# MySQLの対話モードになったら、'NEW_PASS'の箇所を書き換えて新しいパスワードを設定しましょう。
mysql > SET PASSWORD FOR root@localhost=PASSWORD('NEW_PASS');

# 設定したら、反映して対話モードを終了します
mysql > FLUSH PRIVILEGES;
mysql > quit

groonga関連をインストール

sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
$ sudo yum install mecab mecab-devel mecab-ipadic --disablerepo=* --enablerepo=groonga
$ sudo yum install groonga-libs groonga-tokenizer-mecab groonga-normalizer-mysql --disablerepo=* --enablerepo=groonga

ついでにこれも。

yum install http://wing-repo.net/wing/6/x86_64/mysql56-libs-5.6.16-1.el6_14.wing.x86_64.rpm

yum install http://wing-repo.net/wing/6/x86_64/mysql56-5.6.16-1.el6_14.wing.x86_64.rpm

yum install http://wing-repo.net/wing/6/x86_64/mysqlclient16-5.1.69-1.el6_3.wing.x86_64.rpm

yum install http://wing-repo.net/wing/6/x86_64/mysql56-server-5.6.16-1.el6_14.wing.x86_64.rpm

でmroongaもインストール。

rpm -ivh http://wing-repo.net/wing/6/x86_64/mysql56-mroonga-4.00-1.el6_28.wing.x86_64.rpm

インストールされているか確認

mysql -uroot -p -e "SHOW PLUGINS"

mroongaの文字があればOK!

早速動くかテスト

参考: http://noodles-mtb.hatenablog.com/entry/20120317/1331973151

DBつくりまーす

CREATE TABLE items (
    id INT(10) NOT NULL AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content VARCHAR(255) NOT NULL,
FULLTEXT INDEX (title),
    FULLTEXT INDEX (content),
    PRIMARY KEY (`id`)
) ENGINE = mroonga COMMENT = 'engine "innodb"'

mecabを使う場合

コメントに token mecab を入れる。
fulltext index がすでに貼ってある場合は、一旦インデックスを削除し再度貼り直す。

ALTER TABLE test_mecab DROP INDEX content, ADD FULLTEXT INDEX content(content) COMMENT 'parser "TokenMecab"';

検索してみまーす

SELECT * FROM diaries WHERE MATCH(content) AGAINST("hoge");

これで検索できればOK!

すでにあるDBの engine などを変更したい

engine を mroongaに

alter table yourtable engine = mroonga;

field を fulltext にし、INDEXしたい

text型のフィールドには fulltext できないので、 varchar とかにし、文字数をセットしておくこと。
複合インデックスというのは、下の場合だと name , url , area フィールドをまとめて検索しますよ!ってこと。
だから検索した時に少しでも早く検索できるようにインデックス準備しておいてねって感じ。

ALTER TABLE yourtable ADD FULLTEXT fulltext_index(name,url,area);

だから検索する時は、

SELECT * WHERE MATCH(name,url,area) AGAINST('+りんご IN BOOLEAN MODE');

という風に name , url , area を match の中にセットで入れて検索すること。
でないと

"Can't find FULLTEXT index matching the column list"
というエラーが発生してしまう。

cakephp サンプルクエリ

IN BOOLEAN MODE を 使う場合に書く位置を注意する。

  • name, office , work のすべてのフィールドから 営業を検索
  • name にマッチした場合は、scoreを 1000倍にして重み付け
  • cakephp のバーチャルフィールドを使う
$opt = array(
            'conditions' => array('MATCH (name,body,office,work) AGAINST (? IN BOOLEAN MODE)' => "*W1:1000,2:1 +営業"),
            'limit' => 10,
            'order' => 'score desc'
         );
        
        
         $this->Recruit->virtualFields = array(
             'score' => "MATCH (name,body,office,work) AGAINST ('*W1:1000,2:1 +営業' IN BOOLEAN MODE)",
         );
         $res = $this->Recruit->find('all',$opt);
                
                
         pr($res);
         pr($opt);

発行されるクエリが

SELECT `Recruit`.`id`, `Recruit`.`pref_id`, `Recruit`.`pref`, `Recruit`.`office_id`, `Recruit`.`name`, `Recruit`.`area`, `Recruit`.`body`, `Recruit`.`sponcer`, `Recruit`.`url`, `Recruit`.`office`, `Recruit`.`money`, `Recruit`.`money_type`, `Recruit`.`work`, `Recruit`.`money_min`, `Recruit`.`money_max`, `Recruit`.`nensyuu`, `Recruit`.`renketu`, `Recruit`.`created`, (MATCH (name,body,office,work) AGAINST ('*W1:1000,2:1 +営業' IN BOOLEAN MODE)) AS `Recruit__score` FROM `qjiin`.`qjiin_recruits` AS `Recruit` WHERE MATCH (name,body,office,work) AGAINST ('*W1:1000,2:1 +営業' IN BOOLEAN MODE) ORDER BY (MATCH (name,body,office,work) AGAINST ('*W1:1000,2:1 +営業' IN BOOLEAN MODE)) desc LIMIT 10

その他

$data = $this->find('all',array('conditions' => array('MATCH (body) AGAINST (? IN BOOLEAN MODE)' => '+'.$res['body']) , 'order' => 'id desc'));

or検索

dプラグマを使用。 クラウドソーシング or 在宅 を含むものを探す

$res['AND'] = array('MATCH(work) AGAINST(? IN BOOLEAN MODE)' => array('*DOR クラウドソーシング 在宅'));
スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

4月29日 ( 土 ) にアクセスが多かった記事はこちら!