SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
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を採用

Mais conteúdo relacionado

Mais procurados

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングKosuke Kida
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性Ohyama Masanori
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
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
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座Samir Hammoudi
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いたAkihiro Kuwano
 

Mais procurados (20)

PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 

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

PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめOhyama Masanori
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介
オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介
オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介Satoshi Kitajima
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介Masahiko Sawada
 
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...Insight Technology, Inc.
 
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみたタクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみたTetsutaro Watanabe
 
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦Insight Technology, Inc.
 
FPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティングFPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティングHideo Terada
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...NTT DATA Technology & Innovation
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
AWSとGPUインスタンスのご紹介
AWSとGPUインスタンスのご紹介AWSとGPUインスタンスのご紹介
AWSとGPUインスタンスのご紹介Yasuhiro Matsuo
 
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)Hadoop / Spark Conference Japan
 
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Tatsuya Atsumi
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.JapanKohei KaiGai
 
【Jpug勉強会】10大ニュースで振り返るpg con2013
【Jpug勉強会】10大ニュースで振り返るpg con2013【Jpug勉強会】10大ニュースで振り返るpg con2013
【Jpug勉強会】10大ニュースで振り返るpg con2013Daichi Egawa
 
Chainerで学ぶdeep learning
Chainerで学ぶdeep learningChainerで学ぶdeep learning
Chainerで学ぶdeep learningRetrieva inc.
 
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像Hinemos
 

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

PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介
オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介
オープンソースのデータ分析ソフト3製品「RapidMiner」「NYSOL」「Revolution R Enterprise (RRE) ※Rの商用版」のご紹介
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
 
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
 
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみたタクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
 
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
 
FPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティングFPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティング
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
AWSとGPUインスタンスのご紹介
AWSとGPUインスタンスのご紹介AWSとGPUインスタンスのご紹介
AWSとGPUインスタンスのご紹介
 
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
 
Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016Pythonで入門するApache Spark at PyCon2016
Pythonで入門するApache Spark at PyCon2016
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.Japan
 
【Jpug勉強会】10大ニュースで振り返るpg con2013
【Jpug勉強会】10大ニュースで振り返るpg con2013【Jpug勉強会】10大ニュースで振り返るpg con2013
【Jpug勉強会】10大ニュースで振り返るpg con2013
 
Presto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnightPresto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
 
Chainerで学ぶdeep learning
Chainerで学ぶdeep learningChainerで学ぶdeep learning
Chainerで学ぶdeep learning
 
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
運用アナリティクスを実現!最新Hinemos ver.6.1の全体像
 

Mais de NTT DATA OSS Professional Services

Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力NTT DATA OSS Professional Services
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントNTT DATA OSS Professional Services
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~NTT DATA OSS Professional Services
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~NTT DATA OSS Professional Services
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのことNTT DATA OSS Professional Services
 

Mais de NTT DATA OSS Professional Services (20)

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

Último

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 

Último (9)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 

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を採用