SlideShare a Scribd company logo
Copyright © 2016 NTT DATA Corporation
2016年2月9日
株式会社NTTデータ 澤田雅彦
PostgreSQLでpg_bigmを使って日本語全文検索
~pg_bigmで全文検索するときに知っておくべき8のこと~
@MySQLとPostgreSQLの日本語全文検索勉強会
2Copyright © 2016 NTT DATA Corporation
PostgreSQL 9.5 リリース!
1/7にリリース
されました!
3Copyright © 2016 NTT DATA Corporation
PostgreSQL 開発者@ NTT データ
社内 PostgreSQL 営業・技術支援
PostgreSQL のコア機能を開発
レプリケーション運用性向上
REINDEX SCHEMA / VERBOSE
pg_bigm(全文検索モジュール)
コア機能へのパッチレビューア
澤田 雅彦 @sawada_masahiko
4Copyright © 2016 NTT DATA Corporation
「PostgreSQL 全文検索 日本語」で検索
pg_bigm
textsearch_ja
pg_trgm
pgroonga
5Copyright © 2016 NTT DATA Corporation
PostgreSQLで使える日本語全文検索モジュールはいろいろ
• pgroonga
• pg_bigm
• pg_trgm
• unigram
• textsearch_ja
• textsearch_groonga
• textsearch_senna
など
6Copyright © 2016 NTT DATA Corporation
形態素解析 N-gram
分類すると
• textsearch_ja
• pgroonga
• textsearch_
groonga
• pg_bigm
• pg_trgm
• unigram
• textsearch_senna
Copyright © 2016 NTT DATA Corporation 7
pg_bigmで全文検索するときに知っておくべき8のこと
8Copyright © 2016 NTT DATA Corporation
1.
全文検索インデックスが
必要ない検索と
必要ある検索
9Copyright © 2016 NTT DATA Corporation
全文検索インデックスが必要ない/ある検索
全文検索インデックスが必要ない検索
• テーブル件数が少ない → シーケンシャルスキャンでOK
• 前方一致検索だけ (‘東京%’) → BtreeインデックスでOK
• 後方一致検索だけ (‘%東京’) → Btree(式)インデックスでOK
全文検索インデックスが必要ある検索
• 大きいテーブルで中間一致検索を使う (‘%東京%’)
• 前方、後方、中間一致検索をする可能性がある
10Copyright © 2016 NTT DATA Corporation
2.
なぜpg_bigmを開発したか
11Copyright © 2016 NTT DATA Corporation
昔、PostgreSQLで全文検索したい時
○ PostgreSQL 8系で日本語全文検索が可能
× 全文検索インデックスは、リカバリ未対応
× クラッシュ後、REINDEXが必要
× 8.3以降のVACUUMに未対応
× PostgreSQL9系には未対応
12Copyright © 2016 NTT DATA Corporation
PostgreSQL本体でもN-gram全文検索の利用が可能に
○ PostgreSQL付属モジュール
○ インデックスはPostgreSQLが管理
× 日本語(マルチバイト文字)に未対応
× 1,2文字検索が低速
13Copyright © 2016 NTT DATA Corporation
N-gramで日本語対応
pg_bigmはpg_trgmを日本語検索に強化・最適化したモジュール
pg_bigm
(バイグラム)
pg_trgm
(トライグラム)
インデックスの
作成方法
2-gram 3-gram
日本語対応 ○ ×
1,2文字検索 高速 低速
14Copyright © 2016 NTT DATA Corporation
3.
1,2文字検索に対応
15Copyright © 2016 NTT DATA Corporation
1,2文字の検索に対応
• pg_trgmでは検索キーワードが3文字以上でないと、インデックスを使った高速な検索ができない。
• pg_bigmでは1,2文字(本、学校など)の検索でもインデックスを使用した高速な検索が可能。
検索例 pg_bigm pg_trgm
col LIKE ‘%駅%’ 高速 低速
col LIKE ‘%東京%’ 高速 低速
col LIKE ‘%東京駅%’ 高速 高速
16Copyright © 2016 NTT DATA Corporation
4.
性能情報
17Copyright © 2016 NTT DATA Corporation
検索キーワード 取得件数 pg_bigm pg_trgm SeqScan
町 17万件 0.4 秒 504 秒
15 秒
東京 16万件 0.3 秒 407 秒
東京都 4万件 0.2 秒 0.2 秒
東京と京都 150件 0.004 秒 0.001 秒
昭和四十四年度以降 150件 0.08 秒 0.02 秒
性能情報
日本語データを全文検索(サイズ:6GB、データ件数:1300万件)
18Copyright © 2016 NTT DATA Corporation
5.
pg_bigmを使うために
必要な4ステップ
19Copyright © 2016 NTT DATA Corporation
pg_bigmを使うために必要な4ステップ
1. RPMインストール
• PostgreSQLのバージョンに合ったRPMをダウンロードし、インストール
• https://osdn.jp/projects/pgbigm/releases/p13634
2. 設定ファイルに追記
• postgresql.confに「shared_preload_libraries = ‘pg_bigm’」を追記
3. pg_bigmをPostgreSQLに登録
• CREATE EXTENSION pg_bigm;
4. 全文検索インデックスを作成
• CREATE INDEX hoge_idx ON hoge USING gin (col gin_bigm_ops);
20Copyright © 2016 NTT DATA Corporation
6.
PostgreSQLの
GINインデックスを利用
21Copyright © 2016 NTT DATA Corporation
PostgreSQLのGINインデックスを利用
• 全文検索インデックス自体はPostgreSQLが管理。
• pg_bigmはGINインデックスへのアクセス方法のみを提供
• リカバリ、PITR、レプリケーションはPostgreSQLに任せることが可能。
WAL
pg_bigm
GIN
インデックス
テーブル
サーバ
プロセス
WALを書く
アクセス
PostgreSQL内部
アクセス
22Copyright © 2016 NTT DATA Corporation
7.
PostgreSQL 9.4以降
との組み合わせがおすすめ
23Copyright © 2016 NTT DATA Corporation
PostgreSQL9.4以降がおすすめ
PostgreSQL9.4でGINインデックスのサイズ、検索性能が改善されました。
検索
キーワード
PG9.3
+
pg_bigm
PG9.4
+
pg_bigm
東京 0.8 秒 0.3 秒
東京都 0.5 秒 0.2 秒
東京と京都 0.03秒 0.004 秒
昭和四十四
年度以降
0.3秒 0.08 秒
6.5 GB
10 GB
3.7 GB
■GINインデックスの圧縮 ■検索性能の向上
24Copyright © 2016 NTT DATA Corporation
8.
“文字の種類を意識しない”
全文検索が可能
25Copyright © 2016 NTT DATA Corporation
“文字の種類を意識しない”全文検索が可能
=# SELECT * FROM hoge WHERE pgs2norm(col) LIKE likequery(pgs2norm('%ポスグレ%‘));
col
--------------------------
半角文字でポスグレ
全角文字でポスグレ
半角、全角を混ぜてポスグレ
(3 rows)
=# SELECT * FROM hoge WHERE pgs2norm(col) LIKE likequery(pgs2norm('%1番目%‘));
col
--------
1番目
1番目
①番目
半角文字で全角文字を、全角文字で半角文字を検索。
26Copyright © 2016 NTT DATA Corporation
「ludia_funcs」を使用
• 正規化関数を使用した関数インデックスを作成
• GINインデックスには正規化された文字情報が格納される
• 依然、GINインデックスはPostgreSQLが管理
pg_bigm
「1番」
「番目」
ludia_funcs
「①番目」 「1番目」
入力データ
「①番目」
正規化関数
=# CREATE INDEX … USING gin (pg2norm(col) gin_bigm_ops);
GIN
インデックス
=# SELECT * FROM hoge WHERE pgs2norm(col) LIKE likequery(pgs2norm('%ポスグレ%’));
27Copyright © 2016 NTT DATA Corporation
最後に
1. 全文検索インデックスが必要ない検索と必要ある検索
2. なぜpg_bigmを開発したか
3. 1,2文字検索に対応
4. 性能情報
5. pg_bigmを使うまでに必要な4ステップ
6. PostgreSQLのGINインデックスを利用
7. PostgreSQL9.4以降との組み合わせがおすすめ
8. “文字の種類を意識しない”全文検索が可能
Copyright © 2011 NTT DATA Corporation
Copyright © 2016 NTT DATA Corporation
29Copyright © 2016 NTT DATA Corporation
(参考)N-gramと形態素解析
N-gram
• 文章を文字単位で分割 (‘夜景が綺麗’ → ‘夜景’, ‘景が’, ‘が綺’, ‘綺麗’)
• 漏れがなく全文検索することが可能 (造語、新出語も対応)
• 採用モジュール : pg_bigm, pg_trgm, pgroonga, unigram,
textsearch_senna
形態素解析
• 文章を単語単位で分割 (‘夜景が綺麗’ → ‘夜景’, ‘綺麗’)
• 検索ノイズの少ない全文検索することが可能 (京都で「東京都庁」がヒットし
ない)
• 採用モジュール : pgroonga, textsearch_ja, textsearch_groonga
pg_bigmは
2-gramを採用

More Related Content

PPTX
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pg_bigmを用いた全文検索のしくみ(後編)
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PDF
pg_bigmを用いた全文検索のしくみ(前編)
PDF
pg_trgmと全文検索
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmを用いた全文検索のしくみ(後編)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
pg_bigmを用いた全文検索のしくみ(前編)
pg_trgmと全文検索
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLの運用・監視にまつわるエトセトラ
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)

What's hot (20)

PDF
使ってみませんか?pg_hint_plan
PDF
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
PDF
Vacuum徹底解説
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
まずやっとくPostgreSQLチューニング
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
SQLチューニング入門 入門編
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PDF
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLの関数属性を知ろう
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
使ってみませんか?pg_hint_plan
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
Vacuum徹底解説
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
まずやっとくPostgreSQLチューニング
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
SQLチューニング入門 入門編
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの関数属性を知ろう
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
Ad

Similar to PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料) (20)

PDF
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
PDF
pg_bigmを触り始めた人に伝えたいこと
PDF
pg_bigmと類似度検索
PDF
PostgreSQLによるデータ分析ことはじめ
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
PDF
PostgreSQL 9.6 新機能紹介
PDF
KOF2015 PostgreSQL 9.5
PDF
Pgunconf 20121212-postgeres fdw
PDF
PostgreSQL13 新機能紹介
PDF
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
10大ニュースで振り返るPGCon2015
PDF
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
使ってみませんか?pg hint_plan
PDF
Pgunconf14 pg13-psql
PDF
PostgreSQL 9.5 新機能紹介
PDF
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigmを触り始めた人に伝えたいこと
pg_bigmと類似度検索
PostgreSQLによるデータ分析ことはじめ
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
PostgreSQL 9.6 新機能紹介
KOF2015 PostgreSQL 9.5
Pgunconf 20121212-postgeres fdw
PostgreSQL13 新機能紹介
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
10大ニュースで振り返るPGCon2015
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
使ってみませんか?pg hint_plan
Pgunconf14 pg13-psql
PostgreSQL 9.5 新機能紹介
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
MyNA JPUG study 20160220-postgresql-json-datatype
Ad

More from NTT DATA OSS Professional Services (20)

PDF
Global Top 5 を目指す NTT DATA の確かで意外な技術力
PDF
Spark SQL - The internal -
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Hadoopエコシステムのデータストア振り返り
PDF
HDFS Router-based federation
PDF
Apache Hadoopの新機能Ozoneの現状
PDF
Distributed data stores in Hadoop ecosystem
PDF
Structured Streaming - The Internal -
PDF
Apache Hadoopの未来 3系になって何が変わるのか?
PDF
Apache Hadoop and YARN, current development status
PDF
HDFS basics from API perspective
PDF
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
PDF
20170303 java9 hadoop
PPTX
ブロックチェーンの仕組みと動向(入門編)
PDF
Application of postgre sql to large social infrastructure jp
PDF
Application of postgre sql to large social infrastructure
PDF
Apache Hadoop 2.8.0 の新機能 (抜粋)
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
PDF
商用ミドルウェアのPuppet化で気を付けたい5つのこと
PPTX
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
Global Top 5 を目指す NTT DATA の確かで意外な技術力
Spark SQL - The internal -
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Hadoopエコシステムのデータストア振り返り
HDFS Router-based federation
Apache Hadoopの新機能Ozoneの現状
Distributed data stores in Hadoop ecosystem
Structured Streaming - The Internal -
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoop and YARN, current development status
HDFS basics from API perspective
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
20170303 java9 hadoop
ブロックチェーンの仕組みと動向(入門編)
Application of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure
Apache Hadoop 2.8.0 の新機能 (抜粋)
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
商用ミドルウェアのPuppet化で気を付けたい5つのこと
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~

PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)

  • 1. Copyright © 2016 NTT DATA Corporation 2016年2月9日 株式会社NTTデータ 澤田雅彦 PostgreSQLでpg_bigmを使って日本語全文検索 ~pg_bigmで全文検索するときに知っておくべき8のこと~ @MySQLとPostgreSQLの日本語全文検索勉強会
  • 2. 2Copyright © 2016 NTT DATA Corporation PostgreSQL 9.5 リリース! 1/7にリリース されました!
  • 3. 3Copyright © 2016 NTT DATA Corporation PostgreSQL 開発者@ NTT データ 社内 PostgreSQL 営業・技術支援 PostgreSQL のコア機能を開発 レプリケーション運用性向上 REINDEX SCHEMA / VERBOSE pg_bigm(全文検索モジュール) コア機能へのパッチレビューア 澤田 雅彦 @sawada_masahiko
  • 4. 4Copyright © 2016 NTT DATA Corporation 「PostgreSQL 全文検索 日本語」で検索 pg_bigm textsearch_ja pg_trgm pgroonga
  • 5. 5Copyright © 2016 NTT DATA Corporation PostgreSQLで使える日本語全文検索モジュールはいろいろ • pgroonga • pg_bigm • pg_trgm • unigram • textsearch_ja • textsearch_groonga • textsearch_senna など
  • 6. 6Copyright © 2016 NTT DATA Corporation 形態素解析 N-gram 分類すると • textsearch_ja • pgroonga • textsearch_ groonga • pg_bigm • pg_trgm • unigram • textsearch_senna
  • 7. Copyright © 2016 NTT DATA Corporation 7 pg_bigmで全文検索するときに知っておくべき8のこと
  • 8. 8Copyright © 2016 NTT DATA Corporation 1. 全文検索インデックスが 必要ない検索と 必要ある検索
  • 9. 9Copyright © 2016 NTT DATA Corporation 全文検索インデックスが必要ない/ある検索 全文検索インデックスが必要ない検索 • テーブル件数が少ない → シーケンシャルスキャンでOK • 前方一致検索だけ (‘東京%’) → BtreeインデックスでOK • 後方一致検索だけ (‘%東京’) → Btree(式)インデックスでOK 全文検索インデックスが必要ある検索 • 大きいテーブルで中間一致検索を使う (‘%東京%’) • 前方、後方、中間一致検索をする可能性がある
  • 10. 10Copyright © 2016 NTT DATA Corporation 2. なぜpg_bigmを開発したか
  • 11. 11Copyright © 2016 NTT DATA Corporation 昔、PostgreSQLで全文検索したい時 ○ PostgreSQL 8系で日本語全文検索が可能 × 全文検索インデックスは、リカバリ未対応 × クラッシュ後、REINDEXが必要 × 8.3以降のVACUUMに未対応 × PostgreSQL9系には未対応
  • 12. 12Copyright © 2016 NTT DATA Corporation PostgreSQL本体でもN-gram全文検索の利用が可能に ○ PostgreSQL付属モジュール ○ インデックスはPostgreSQLが管理 × 日本語(マルチバイト文字)に未対応 × 1,2文字検索が低速
  • 13. 13Copyright © 2016 NTT DATA Corporation N-gramで日本語対応 pg_bigmはpg_trgmを日本語検索に強化・最適化したモジュール pg_bigm (バイグラム) pg_trgm (トライグラム) インデックスの 作成方法 2-gram 3-gram 日本語対応 ○ × 1,2文字検索 高速 低速
  • 14. 14Copyright © 2016 NTT DATA Corporation 3. 1,2文字検索に対応
  • 15. 15Copyright © 2016 NTT DATA Corporation 1,2文字の検索に対応 • pg_trgmでは検索キーワードが3文字以上でないと、インデックスを使った高速な検索ができない。 • pg_bigmでは1,2文字(本、学校など)の検索でもインデックスを使用した高速な検索が可能。 検索例 pg_bigm pg_trgm col LIKE ‘%駅%’ 高速 低速 col LIKE ‘%東京%’ 高速 低速 col LIKE ‘%東京駅%’ 高速 高速
  • 16. 16Copyright © 2016 NTT DATA Corporation 4. 性能情報
  • 17. 17Copyright © 2016 NTT DATA Corporation 検索キーワード 取得件数 pg_bigm pg_trgm SeqScan 町 17万件 0.4 秒 504 秒 15 秒 東京 16万件 0.3 秒 407 秒 東京都 4万件 0.2 秒 0.2 秒 東京と京都 150件 0.004 秒 0.001 秒 昭和四十四年度以降 150件 0.08 秒 0.02 秒 性能情報 日本語データを全文検索(サイズ:6GB、データ件数:1300万件)
  • 18. 18Copyright © 2016 NTT DATA Corporation 5. pg_bigmを使うために 必要な4ステップ
  • 19. 19Copyright © 2016 NTT DATA Corporation pg_bigmを使うために必要な4ステップ 1. RPMインストール • PostgreSQLのバージョンに合ったRPMをダウンロードし、インストール • https://osdn.jp/projects/pgbigm/releases/p13634 2. 設定ファイルに追記 • postgresql.confに「shared_preload_libraries = ‘pg_bigm’」を追記 3. pg_bigmをPostgreSQLに登録 • CREATE EXTENSION pg_bigm; 4. 全文検索インデックスを作成 • CREATE INDEX hoge_idx ON hoge USING gin (col gin_bigm_ops);
  • 20. 20Copyright © 2016 NTT DATA Corporation 6. PostgreSQLの GINインデックスを利用
  • 21. 21Copyright © 2016 NTT DATA Corporation PostgreSQLのGINインデックスを利用 • 全文検索インデックス自体はPostgreSQLが管理。 • pg_bigmはGINインデックスへのアクセス方法のみを提供 • リカバリ、PITR、レプリケーションはPostgreSQLに任せることが可能。 WAL pg_bigm GIN インデックス テーブル サーバ プロセス WALを書く アクセス PostgreSQL内部 アクセス
  • 22. 22Copyright © 2016 NTT DATA Corporation 7. PostgreSQL 9.4以降 との組み合わせがおすすめ
  • 23. 23Copyright © 2016 NTT DATA Corporation PostgreSQL9.4以降がおすすめ PostgreSQL9.4でGINインデックスのサイズ、検索性能が改善されました。 検索 キーワード PG9.3 + pg_bigm PG9.4 + pg_bigm 東京 0.8 秒 0.3 秒 東京都 0.5 秒 0.2 秒 東京と京都 0.03秒 0.004 秒 昭和四十四 年度以降 0.3秒 0.08 秒 6.5 GB 10 GB 3.7 GB ■GINインデックスの圧縮 ■検索性能の向上
  • 24. 24Copyright © 2016 NTT DATA Corporation 8. “文字の種類を意識しない” 全文検索が可能
  • 25. 25Copyright © 2016 NTT DATA Corporation “文字の種類を意識しない”全文検索が可能 =# SELECT * FROM hoge WHERE pgs2norm(col) LIKE likequery(pgs2norm('%ポスグレ%‘)); col -------------------------- 半角文字でポスグレ 全角文字でポスグレ 半角、全角を混ぜてポスグレ (3 rows) =# SELECT * FROM hoge WHERE pgs2norm(col) LIKE likequery(pgs2norm('%1番目%‘)); col -------- 1番目 1番目 ①番目 半角文字で全角文字を、全角文字で半角文字を検索。
  • 26. 26Copyright © 2016 NTT DATA Corporation 「ludia_funcs」を使用 • 正規化関数を使用した関数インデックスを作成 • GINインデックスには正規化された文字情報が格納される • 依然、GINインデックスはPostgreSQLが管理 pg_bigm 「1番」 「番目」 ludia_funcs 「①番目」 「1番目」 入力データ 「①番目」 正規化関数 =# CREATE INDEX … USING gin (pg2norm(col) gin_bigm_ops); GIN インデックス =# SELECT * FROM hoge WHERE pgs2norm(col) LIKE likequery(pgs2norm('%ポスグレ%’));
  • 27. 27Copyright © 2016 NTT DATA Corporation 最後に 1. 全文検索インデックスが必要ない検索と必要ある検索 2. なぜpg_bigmを開発したか 3. 1,2文字検索に対応 4. 性能情報 5. pg_bigmを使うまでに必要な4ステップ 6. PostgreSQLのGINインデックスを利用 7. PostgreSQL9.4以降との組み合わせがおすすめ 8. “文字の種類を意識しない”全文検索が可能
  • 28. Copyright © 2011 NTT DATA Corporation Copyright © 2016 NTT DATA Corporation
  • 29. 29Copyright © 2016 NTT DATA Corporation (参考)N-gramと形態素解析 N-gram • 文章を文字単位で分割 (‘夜景が綺麗’ → ‘夜景’, ‘景が’, ‘が綺’, ‘綺麗’) • 漏れがなく全文検索することが可能 (造語、新出語も対応) • 採用モジュール : pg_bigm, pg_trgm, pgroonga, unigram, textsearch_senna 形態素解析 • 文章を単語単位で分割 (‘夜景が綺麗’ → ‘夜景’, ‘綺麗’) • 検索ノイズの少ない全文検索することが可能 (京都で「東京都庁」がヒットし ない) • 採用モジュール : pgroonga, textsearch_ja, textsearch_groonga pg_bigmは 2-gramを採用