風邪も治って、夕方から検索機能を実装
まずは、MySQLにMroongaのプラグインを追加
インストール前にデータベースを丸ごとダンプ(バックアップ)
# mysqldump -u [MySQLのユーザ] -p [データベース名] > [ダンプファイルのパス]
バックアップのダンプファイルを開いて CREATE TABLE の末尾にある、ENGINEをMroongaに修正
# vi [ダンプファイルのパス]
元:
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
先:
) ENGINE=Mroonga DEFAULT CHARSET=utf8;
一旦、データベースを再作成しダンプを戻す(リストア)
# mysql -u root -p
mysql> DROP DATABASE [データベース名];
mysql> CREATE DATABASE [データベース名];
mysql> quit
# /usr/bin/mysql -u [MySQLのユーザ] -p [データベース名] < [ダンプファイルのパス]
これで完了。
データベースのスキーマをほぼそのまま全文検索ができるようになった Mroongaの中の人たちありがとう m(__)m
このあたりでホスティング先のプロバイダからレプリケーションが動いとらんぞと連絡… 既に本稼働用の環境で動いてるんだが、物理サーバ2台にマスターとバックアップのVPSを分散してあって、冗長化してある (多少、値は張るが、サーバ監視が無いと寝たいときに寝られるので安心なんだよな) データベースもレプリケーション機能を使ってバックアップしてるが、モジュールを追加したせいなのか、データベースを作り直したせいでレプリケーションが止まったらしい 開発中のせいか手元にあるサーバの感覚で連絡し忘れてた。申し訳ない… 作業手順を連絡。復旧よろしくです ;-)
引き続き、バックエンド側の検索処理まわりを直す
具体的にはWHERE句を以下のような感じで修正
SELECT * FROM [テーブル名] WHERE [カラム名] LIKE '%[検索キーワード]%';
↓
SELECT * FROM [テーブル名] WHERE MATCH([カラム名]) AGAINST("+[検索キーワード]" in boolean mode);
データがまだ少ないので速度検証は行わず。ブラウザのデバッガを見ながらF5攻撃してみる。体感上は特に問題なし あと、キーワードが複数の時に思ったような結果が得られないが、バックエンド側の設計を見直す必要があるので後日対応へ持ち越し
その後、ポータルとアカウント用ページのフロントエンドの検索フォームを見えるようにする 検索の負荷を考えながら、それぞれバックエンド側との通信手順を多少変えて実装する
nサムネイル画像がブラウザ幅に追従しておらず、越えてしまうことに気づく… ここは Bootstrap で対応。imgタグのclassに"img-responsive"を書けばオッケ サムネイル画像の表示に背景画像を使ったせいで画像のクリックができないのも改めて見ると不便。あちこち参考にしつつ background-size:cover と似た描画に変えておく
HTML
<div class="frame">
<a href="[画像のリンク先]">
<img class="img-responsive" src="[画像のパス]">
</a>
</div>
CSS
div.frame {
height:120px;
line-height:120px;
overflow:hidden;
position:relative;
}
div.frame img {
position:absolute;
top:50%;left:0;
-webkit-transform:translate(0,-50%);
transform:translate(0,-50%);
}
途中、iPadやiPhoneで横向きに撮った画像が時計回りに90度回転して表示されるのが気になったのであわせて直す。ここも convert のパラメータに -auto-orient を追加するだけ
後は、デバッグしつつリファクタリングを少々。メール対応と今後の進め方の検討など。デバッグもそろそろ自動化しないとなと思いつつ、今日はここまで
写真は途中で作った夜食。100均の安売りおでんダネに出汁と具を少々追加。 さすがに、全部は食べてないw