MySQLとPostgreSQLと日本語全文検索2:初心者向けMroonga・PGroonga情報 #mypgft - 2016-06-09 - ククログ

ククログ

株式会社クリアコード > ククログ > MySQLとPostgreSQLと日本語全文検索2:初心者向けMroonga・PGroonga情報 #mypgft

MySQLとPostgreSQLと日本語全文検索2:初心者向けMroonga・PGroonga情報 #mypgft

6月9日に「MySQLとPostgreSQLと日本語全文検索2」というイベントを開催しました。今回もDMM.comラボさんに会場を提供してもらいました。当日のツイートはMySQLとPostgreSQLと日本語全文検索2 - Togetterまとめにまとまっています。

2月9日に開催した1回目のイベントでは次の2つのことについて紹介しました。

  • MySQLでの日本語全文検索の歴史と実現方法

  • PostgreSQLでの日本語全文検索の歴史と実現方法

2回目となる今回は次のことについて紹介しました。

ここでは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で日本語全文検索したい場合はぜひこれらを検討してみてください。