SlideShare a Scribd company logo
1 of 44
Download to read offline
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
Mroongaと
PGroonga初心者向け情報
須藤功平 クリアコード
MySQLとPostgreSQLと日本語全文検索
2016-06-09
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
Mroonga・PGroonga
Mroonga(むるんが)
MySQLに
高速日本語全文検索機能を追加する
プロダクト
PGroonga(ぴーじーるんが)
PostgreSQLに
高速日本語全文検索機能を追加する
プロダクト
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
使いどころ
Mroonga
速さが欲しい
トランザクションはいらない
PGroonga
機能が欲しい
トランザクションも欲しい
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
速い?
Mroonga と PGroonga - Groongaを使って MySQLとPostgreSQLで日本語全文検索 Powered by Rabbit 2.1.9
速さ:検索1
キーワード:テレビアニメ
(ヒット数:約2万3千件)
InnoDB ngram 3m2s
InnoDB MeCab 6m20s
Mroonga:1 0.11s
pg_bigm 4s
PGroonga:2 0.29s
詳細は前回の資料を参照
http://slide.rabbit-shocker.org/authors/kou/mysql-and-
postgresql-and-japanese-full-text-search/
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
Mroongaのモード
ストレージモード
ストレージとインデックスに
Groongaを使う
ラッパーモード
ストレージは
既存ストレージエンジンをラップ
全文検索・位置情報インデックスだけ
Groongaを使う
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
Mroongaのモード
MySQL
ストレージ
モード
ラッパー
モード
データ
インデックス
InnoDB
by Groongaプロジェクト
by Mroongaプロジェクト
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
ストレージモード
全文検索が速い
それ以外の条件も速い
数値の比較とか
挿入も更新も削除も速い
ソートも速い
トランザクションはない
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
ラッパーモード
全文検索が速い
全文検索以外はラップ対象の
ストレージエンジンに依存
トランザクション
ストレージのみ
インデックスには効かない
ロールバックしたらインデックスの再構築が必要
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
使い分け
できればストレージモード
ムリならラッパーモード
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
ストレージモードの条件
NULLがないこと
あるならテーブルをわけるか
ラッパーモード
トランザクションを使わない
例:追記のみ(ログとか)
例:同時に更新されないようにする
例:スレーブにする(後述)
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
オススメの使い方
テーブル定義
デフォルトで使う(いい感じになる)
カスタマイズは慣れてからで十分
検索
IN BOOLEAN MODEを使う(いつもの検索)
*D+プラグマを使う(デフォルトAND)
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
テーブル定義
CREATE TABLE items (
title TEXT,
FULLTEXT INDEX (title)
-- ↑COMMENTでカスタマイズしない
) ENGINE=Mroonga
DEFAULT CHARSET=utf8mb4;
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
検索
SELECT * FROM items
WHERE
MATCH(title)
-- ↓*D+プラグマ
AGAINST('*D+ 激安 人気'
IN BOOLEAN MODE);
-- ↑IN BOOLEAN MODE
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
トランザクション欲しい!
レプリケーションで対応可能
構成
マスター:InnoDB
スレーブ:Mroonga
MySQLはマスターとスレーブで
違うストレージエンジンを使える!
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
トランザクションと
レプリケーション
MySQL
(マスター)
InnoDB
トラン
ザクション
MySQL
(スレーブ)
コミットされた順に
直列化されて
スレーブに届く
スレーブに
トランザクションは
必要ない!
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順1
マスターmy.cnf:
[mysqld]
log-bin=mysql-bin
server-id=1
バイナリーログを有効にしてサーバーIDを指定
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順2
スレーブmy.cnf:
[mysqld]
server-id=2
サーバーIDを指定
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順3
マスター:
CREATE USER 'repl'@'%' IDENTIFIED BY '1qazXSW@';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
レプリケーション用ユーザーを作成
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順4
マスター:
SHOW MASTER STATUSG
-- File: mysql-bin.000001
-- Position: 855
-- Binlog_Do_DB:
-- Binlog_Ignore_DB:
-- Executed_Gtid_Set:
バイナリーログの情報を確認
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順5
スレーブ:
CHANGE MASTER TO
MASTER_HOST='192.168.0.9',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=855;
START SLAVE USER='repl'
PASSWORD='1qazXSW@';
レプリケーション開始
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順6
マスター:
CREATE TABLE items (
title text
) DEFAULT CHARSET=utf8mb4;
マスターでテーブル作成
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順7
スレーブ:
ALTER TABLE items
ENGINE=Mroonga,
ADD FULLTEXT INDEX (title);
スレーブだけMroongaに変更
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順8
マスター:
INSERT INTO items
VALUES ('データベース管理システム');
マスターでデータ登録
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション手順9
スレーブ:
SELECT * FROM items
WHERE MATCH(title)
AGAINST('*D+ データ 管理'
IN BOOLEAN MODE);
-- +--------------------------------------+
-- | title |
-- +--------------------------------------+
-- | データベース管理システム |
-- +--------------------------------------+
スレーブで全文検索
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
まとめ
できればストレージモード
テーブル定義:デフォルトでOK
検索:IN BOOLEAN MODEと*D+
トランザクション:スレーブ
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
PGroongaのいいところ
検索条件を柔軟に指定可能
MySQL:拡張はAGAINST()内で頑張る
PostgreSQL:演算子を追加可能
トランザクション対応
ロールバックも効く
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
オススメの使い方
テーブル定義
主キーを指定する
インデックス定義
デフォルトで使う(いい感じになる)
検索
search_path設定→@@演算子を使う
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
テーブル定義
CREATE TABLE items (
id integer PRIMARY KEY,
title text
);
スコアー取得時に必要なので主キーを指定
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
インデックス定義
CREATE INDEX pgroonga_items_index
ON items
USING pgroonga (id, title);
主キーをインデックス対象にする
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
search_pathを設定
-- 現在のセッションのみ有効
SET search_path TO "$user",public,pgroonga,pg_catalog;
-- user1ユーザーのみ有効
ALTER ROLE user1
SET search_path TO "$user",public,pgroonga,pg_catalog;
-- db1データベースでは永続的に有効
ALTER DATABASE db1
SET search_path TO "$user",public,pgroonga,pg_catalog;
pg_catalogの前にpgroongaを入れる
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
なぜ設定する必要があるか
PostgreSQLに@@があるから
組み込みの@@より
PGroongaの@@を優先したい
優先しないと
インデックススキャンと
シーケンシャルスキャンで
結果が異なる
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
@@演算子で検索
SELECT *,
pgroonga.score(items) AS score
FROM items
WHERE title @@ '激安 人気'
ORDER BY score DESC;
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
独自演算子がうれしい例
入力補完https://github.com/pgroonga/pgroonga/tree/master/
examples/completion
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
テーブル作成
CREATE TABLE dictionary (
term text,
readings text[], -- 配列
english text
);
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
データ
INSERT INTO dictionary VALUES
('・',
ARRAY['ナカグロ', 'ナカポチ'],
'(n) middle dot ...'),
-- (...),
('踵',
ARRAY['カカト', 'キビス', 'クビス'],
'(n) (uk) heel ...');
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
インデックス定義
CREATE INDEX pgroonga_index
ON dictionary
USING pgroonga (
-- ↓前方一致・前方一致RK検索用
term pgroonga.text_term_search_ops_v2,
-- ↓配列に対する前方一致・前方一致RK検索用
readings pgroonga.text_array_term_search_ops_v2);
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
検索:独自演算子+OR
SELECT term, readings, english
FROM dictionary
WHERE term &^ 'nak' OR
-- ↑前方一致検索
readings &^~> 'nak'
-- ↑前方一致RK検索
ORDER BY term LIMIT 10;
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
結果例:nak
前方一致RK検索でヒット
term | readings | english
--------------+----------------------+-------------------
・ | {ナカグロ,ナカポチ} | (n) middle dot ...
NaK | {ナック} | (n) NaK (sodiu...
なくても良い | {ナクテモヨイ | (exp) (1) (uk) ...
... | ... | ...
(10 rows)
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
結果例:なか
前方一致RK検索でヒット
term | readings | english
--------------+----------------------+-------------------
・ | {ナカグロ,ナカポチ} | (n) middle dot ...
泣かされる | {ナカサレル} | (v1,vi) (1) to ...
泣かせる | {ナカセル} | (v1,vt) (1) to ...
... | ... | ...
(10 rows)
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
結果例:中
前方一致RK検索でヒット
term | readings | english
--------------+----------------------+-------------------
中 | {ウチ,ジュウ,チュウ} | (n,adj-no) (1) ...
中々 | {ナカナカ} | (adv,adj-na) ..
中2 | {チュウニ} | (n) second-year
... | ... | ...
(10 rows)
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
レプリケーション
PostgreSQL標準機能:×
プラグインはWALを使えない
pglogical:○
詳細:http://www.clear-code.com/blog/2016/3/22.html
PostgreSQL 9.6:たぶん○
プラグインでもWALを使える
正式リリースまでに対応したい
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
まとめ
トランザクション対応
テーブル定義:主キーを指定
インデックス定義:デフォルト
検索:search_pathと@@
レプリケーション:pglogical
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
相談場所
メーリングリスト
groonga-dev
チャット
https://gitter.im/groonga/ja
Twitter:@groonga
勉強会
Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0
勉強会
「Groongaで学ぶ全文検索」
全文検索について学ぶ会
内容は参加者が知りたいこと
ほぼ隔週金曜夜開催
次回は6月17日
https://groonga.doorkeeper.jp/events/45556

More Related Content

What's hot

MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうkasaharatt
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etcAzure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etcYoichi Kawasaki
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
Amazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてAmazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてTaiji INOUE
 
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)NTT DATA OSS Professional Services
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニングyoku0825
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?ichirin2501
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみMasahiko Sawada
 

What's hot (20)

MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etcAzure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
Amazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてAmazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用について
 
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
nginx入門
nginx入門nginx入門
nginx入門
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
 

Similar to 初心者向けMroonga・PGroonga情報

MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?Kouhei Sutou
 
Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Kouhei Sutou
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーKouhei Sutou
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!Kouhei Sutou
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
DroongaのはじめかたKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムKouhei Sutou
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べMasahiro Nagano
 
Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Kouhei Sutou
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)Kosuke Kida
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29kenhys
 

Similar to 初心者向けMroonga・PGroonga情報 (15)

MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
MySQLとPostgreSQLと日本語全文検索 - Azure DatabaseでMroonga・PGroongaを使いたいですよね!?
 
Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法
 
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
MySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナー
 
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 PHPでPostgreSQLとPGroongaを使って高速日本語全文検索! PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
 
PGroongaの実装
PGroongaの実装PGroongaの実装
PGroongaの実装
 
Droongaのはじめかた
DroongaのはじめかたDroongaのはじめかた
Droongaのはじめかた
 
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システムMySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
 
Groonga族2015
Groonga族2015Groonga族2015
Groonga族2015
 
Groongaの特徴
Groongaの特徴Groongaの特徴
Groongaの特徴
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
Groonga族2016
Groonga族2016Groonga族2016
Groonga族2016
 
Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!Mroonga開発者が来たぞ!
Mroonga開発者が来たぞ!
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29Mroonga Meetup 2014/06/29
Mroonga Meetup 2014/06/29
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionKouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
Improve extension API: C++ as better language for extension
Improve extension API: C++ as better language for extensionImprove extension API: C++ as better language for extension
Improve extension API: C++ as better language for extension
 
PGroonga & Zulip
PGroonga & ZulipPGroonga & Zulip
PGroonga & Zulip
 

初心者向けMroonga・PGroonga情報

  • 1. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 Mroongaと PGroonga初心者向け情報 須藤功平 クリアコード MySQLとPostgreSQLと日本語全文検索 2016-06-09
  • 2. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 Mroonga・PGroonga Mroonga(むるんが) MySQLに 高速日本語全文検索機能を追加する プロダクト PGroonga(ぴーじーるんが) PostgreSQLに 高速日本語全文検索機能を追加する プロダクト
  • 3. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 使いどころ Mroonga 速さが欲しい トランザクションはいらない PGroonga 機能が欲しい トランザクションも欲しい
  • 4. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 速い? Mroonga と PGroonga - Groongaを使って MySQLとPostgreSQLで日本語全文検索 Powered by Rabbit 2.1.9 速さ:検索1 キーワード:テレビアニメ (ヒット数:約2万3千件) InnoDB ngram 3m2s InnoDB MeCab 6m20s Mroonga:1 0.11s pg_bigm 4s PGroonga:2 0.29s 詳細は前回の資料を参照 http://slide.rabbit-shocker.org/authors/kou/mysql-and- postgresql-and-japanese-full-text-search/
  • 5. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 Mroongaのモード ストレージモード ストレージとインデックスに Groongaを使う ラッパーモード ストレージは 既存ストレージエンジンをラップ 全文検索・位置情報インデックスだけ Groongaを使う
  • 6. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 Mroongaのモード MySQL ストレージ モード ラッパー モード データ インデックス InnoDB by Groongaプロジェクト by Mroongaプロジェクト
  • 7. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 ストレージモード 全文検索が速い それ以外の条件も速い 数値の比較とか 挿入も更新も削除も速い ソートも速い トランザクションはない
  • 8. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 ラッパーモード 全文検索が速い 全文検索以外はラップ対象の ストレージエンジンに依存 トランザクション ストレージのみ インデックスには効かない ロールバックしたらインデックスの再構築が必要
  • 9. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 使い分け できればストレージモード ムリならラッパーモード
  • 10. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 ストレージモードの条件 NULLがないこと あるならテーブルをわけるか ラッパーモード トランザクションを使わない 例:追記のみ(ログとか) 例:同時に更新されないようにする 例:スレーブにする(後述)
  • 11. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 オススメの使い方 テーブル定義 デフォルトで使う(いい感じになる) カスタマイズは慣れてからで十分 検索 IN BOOLEAN MODEを使う(いつもの検索) *D+プラグマを使う(デフォルトAND)
  • 12. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 テーブル定義 CREATE TABLE items ( title TEXT, FULLTEXT INDEX (title) -- ↑COMMENTでカスタマイズしない ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
  • 13. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 検索 SELECT * FROM items WHERE MATCH(title) -- ↓*D+プラグマ AGAINST('*D+ 激安 人気' IN BOOLEAN MODE); -- ↑IN BOOLEAN MODE
  • 14. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 トランザクション欲しい! レプリケーションで対応可能 構成 マスター:InnoDB スレーブ:Mroonga MySQLはマスターとスレーブで 違うストレージエンジンを使える!
  • 15. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 トランザクションと レプリケーション MySQL (マスター) InnoDB トラン ザクション MySQL (スレーブ) コミットされた順に 直列化されて スレーブに届く スレーブに トランザクションは 必要ない!
  • 16. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順1 マスターmy.cnf: [mysqld] log-bin=mysql-bin server-id=1 バイナリーログを有効にしてサーバーIDを指定
  • 17. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順2 スレーブmy.cnf: [mysqld] server-id=2 サーバーIDを指定
  • 18. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順3 マスター: CREATE USER 'repl'@'%' IDENTIFIED BY '1qazXSW@'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; レプリケーション用ユーザーを作成
  • 19. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順4 マスター: SHOW MASTER STATUSG -- File: mysql-bin.000001 -- Position: 855 -- Binlog_Do_DB: -- Binlog_Ignore_DB: -- Executed_Gtid_Set: バイナリーログの情報を確認
  • 20. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順5 スレーブ: CHANGE MASTER TO MASTER_HOST='192.168.0.9', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=855; START SLAVE USER='repl' PASSWORD='1qazXSW@'; レプリケーション開始
  • 21. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順6 マスター: CREATE TABLE items ( title text ) DEFAULT CHARSET=utf8mb4; マスターでテーブル作成
  • 22. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順7 スレーブ: ALTER TABLE items ENGINE=Mroonga, ADD FULLTEXT INDEX (title); スレーブだけMroongaに変更
  • 23. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順8 マスター: INSERT INTO items VALUES ('データベース管理システム'); マスターでデータ登録
  • 24. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション手順9 スレーブ: SELECT * FROM items WHERE MATCH(title) AGAINST('*D+ データ 管理' IN BOOLEAN MODE); -- +--------------------------------------+ -- | title | -- +--------------------------------------+ -- | データベース管理システム | -- +--------------------------------------+ スレーブで全文検索
  • 25. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 まとめ できればストレージモード テーブル定義:デフォルトでOK 検索:IN BOOLEAN MODEと*D+ トランザクション:スレーブ
  • 26. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 PGroongaのいいところ 検索条件を柔軟に指定可能 MySQL:拡張はAGAINST()内で頑張る PostgreSQL:演算子を追加可能 トランザクション対応 ロールバックも効く
  • 27. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 オススメの使い方 テーブル定義 主キーを指定する インデックス定義 デフォルトで使う(いい感じになる) 検索 search_path設定→@@演算子を使う
  • 28. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 テーブル定義 CREATE TABLE items ( id integer PRIMARY KEY, title text ); スコアー取得時に必要なので主キーを指定
  • 29. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 インデックス定義 CREATE INDEX pgroonga_items_index ON items USING pgroonga (id, title); 主キーをインデックス対象にする
  • 30. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 search_pathを設定 -- 現在のセッションのみ有効 SET search_path TO "$user",public,pgroonga,pg_catalog; -- user1ユーザーのみ有効 ALTER ROLE user1 SET search_path TO "$user",public,pgroonga,pg_catalog; -- db1データベースでは永続的に有効 ALTER DATABASE db1 SET search_path TO "$user",public,pgroonga,pg_catalog; pg_catalogの前にpgroongaを入れる
  • 31. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 なぜ設定する必要があるか PostgreSQLに@@があるから 組み込みの@@より PGroongaの@@を優先したい 優先しないと インデックススキャンと シーケンシャルスキャンで 結果が異なる
  • 32. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 @@演算子で検索 SELECT *, pgroonga.score(items) AS score FROM items WHERE title @@ '激安 人気' ORDER BY score DESC;
  • 33. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 独自演算子がうれしい例 入力補完https://github.com/pgroonga/pgroonga/tree/master/ examples/completion
  • 34. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 テーブル作成 CREATE TABLE dictionary ( term text, readings text[], -- 配列 english text );
  • 35. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 データ INSERT INTO dictionary VALUES ('・', ARRAY['ナカグロ', 'ナカポチ'], '(n) middle dot ...'), -- (...), ('踵', ARRAY['カカト', 'キビス', 'クビス'], '(n) (uk) heel ...');
  • 36. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 インデックス定義 CREATE INDEX pgroonga_index ON dictionary USING pgroonga ( -- ↓前方一致・前方一致RK検索用 term pgroonga.text_term_search_ops_v2, -- ↓配列に対する前方一致・前方一致RK検索用 readings pgroonga.text_array_term_search_ops_v2);
  • 37. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 検索:独自演算子+OR SELECT term, readings, english FROM dictionary WHERE term &^ 'nak' OR -- ↑前方一致検索 readings &^~> 'nak' -- ↑前方一致RK検索 ORDER BY term LIMIT 10;
  • 38. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 結果例:nak 前方一致RK検索でヒット term | readings | english --------------+----------------------+------------------- ・ | {ナカグロ,ナカポチ} | (n) middle dot ... NaK | {ナック} | (n) NaK (sodiu... なくても良い | {ナクテモヨイ | (exp) (1) (uk) ... ... | ... | ... (10 rows)
  • 39. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 結果例:なか 前方一致RK検索でヒット term | readings | english --------------+----------------------+------------------- ・ | {ナカグロ,ナカポチ} | (n) middle dot ... 泣かされる | {ナカサレル} | (v1,vi) (1) to ... 泣かせる | {ナカセル} | (v1,vt) (1) to ... ... | ... | ... (10 rows)
  • 40. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 結果例:中 前方一致RK検索でヒット term | readings | english --------------+----------------------+------------------- 中 | {ウチ,ジュウ,チュウ} | (n,adj-no) (1) ... 中々 | {ナカナカ} | (adv,adj-na) .. 中2 | {チュウニ} | (n) second-year ... | ... | ... (10 rows)
  • 41. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 レプリケーション PostgreSQL標準機能:× プラグインはWALを使えない pglogical:○ 詳細:http://www.clear-code.com/blog/2016/3/22.html PostgreSQL 9.6:たぶん○ プラグインでもWALを使える 正式リリースまでに対応したい
  • 42. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 まとめ トランザクション対応 テーブル定義:主キーを指定 インデックス定義:デフォルト 検索:search_pathと@@ レプリケーション:pglogical
  • 43. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 相談場所 メーリングリスト groonga-dev チャット https://gitter.im/groonga/ja Twitter:@groonga 勉強会
  • 44. Mroonga と PGroonga - 初心者向け情報 Powered by Rabbit 2.2.0 勉強会 「Groongaで学ぶ全文検索」 全文検索について学ぶ会 内容は参加者が知りたいこと ほぼ隔週金曜夜開催 次回は6月17日 https://groonga.doorkeeper.jp/events/45556