6月9日に「MySQLとPostgreSQLと日本語全文検索2」というイベントを開催しました。今回もDMM.comラボさんに会場を提供してもらいました。当日のツイートはMySQLとPostgreSQLと日本語全文検索2 - Togetterまとめにまとまっています。
2月9日に開催した1回目のイベントでは次の2つのことについて紹介しました。
-
MySQLでの日本語全文検索の歴史と実現方法
-
PostgreSQLでの日本語全文検索の歴史と実現方法
2回目となる今回は次のことについて紹介しました。
-
MySQL 5.7 InnoDBの日本語全文検索機能の1歩進んだ使い方
-
pg_bigmの1歩進んだ使い方
- 発表資料:TODO(じきに公開されるはずです。)
-
PGroongaの利用事例(VVAULT AUDITでの利用事例)
ここではMroonga(むるんが)とPGroonga(ぴーじーるんが)の1歩進んだ使い方について少し紹介します。
関連リンク:
今回の発表ではMroongaとPGroongaのオススメの使い方およびレプリケーションまわりについて紹介しました。
Mroongaのオススメの使い方
Mroongaは次のように使うのがオススメです。
-
できればストレージモードを使う
-
テーブル定義はデフォルトのパラメーターを使う(デフォルトでいい感じになるように調整してあります。)
-
検索するときは
IN BOOLEAN MODE
と*D+
プラグマを使う
詳細はスライドに書いていますが、以下のようなSQLで使うということです。
CREATE TABLE items (
title text,
FULLTEXT INDEX (title)
-- ↑をCOMMENTでカスタマイズできるが
-- まずはデフォルトで使うのがオススメ
) ENGINE=Mroonga
DEFAULT CHARSET=utf8mb4;
SELECT * FROM items
WHERE MATCH (title)
-- ↓ *D+プラグマを使ってデフォルトでANDにする
AGAINST ('*D+ 激安 人気' IN BOOLEAN MODE);
-- ↑ ブーリアンモードを使う
-- Web検索エンジンのような使い勝手になる
また、ストレージモードを使うための工夫としてスレーブだけをMroongaにしてレプリケーションする構成とその設定方法も紹介しました。ストレージモードではトランザクションを使えませんが、この構成にするとトランザクションを使わなくてもよくなります。
PGroongaのオススメの使い方
PGroongaは次のように使うのがオススメです。
-
主キーを用意する
-
インデックス定義はデフォルトで使う(デフォルトでいい感じになるように調整してあります。)
-
検索は
search_path
を設定した上で@@
演算子を使う
詳細はスライドに書いていますが、以下のようなSQLで使うということです。
CREATE TABLE items (
-- ↓主キーを用意する
id integer PRIMARY KEY,
title text,
);
CREATE INDEX pgroonga_items_index
ON items
-- ↓ インデックスに主キーを含める
USING pgroonga (id, title);
-- パラメーターは指定せずデフォルトで使う
ALTER DATABASE db1
-- ↓ search_pathにpgroongaスキーマを入れ、pg_catalogスキーマよりも先にする
SET search_path TO "$user",public,pgroonga,pg_catalog;
SELECT *,
-- ↓検索スコアーを取得(このために主キーが必要)
pgroonga.score(items) AS score
FROM items
-- ↓ @@演算子を使う
WHERE title @@ "激安 人気"
ORDER BY score DESC;
PGroongaのレプリケーションについても説明しました。
PGroongaはPostgreSQL標準のレプリケーション機能を使えませんが、pglogicalと組み合わせたレプリケーションは使えます。なお、PostgreSQL 9.6以降ではPostgreSQL標準のレプリケーション機能を使えるようにPGroongaの開発を進めています。
PostgreSQLでの日本語全文検索を実現する方法としてPGroongaに興味のある方は、PGroongaをWindows用のサーバーログ管理ソフトであるVVAULT AUDITでの利用事例「VVAULT AUDITにおけるPGROONGAの利用」も合わせて参照してください。
まとめ
6月9日に開催された「MySQLとPostgreSQLと日本語全文検索2」でのMroongaとPGroongaの発表内容について紹介しました。
MySQL・PostgreSQLで日本語全文検索したい場合はぜひこれらを検討してみてください。