ククログ

株式会社クリアコード > ククログ > PostgreSQLで日本語全文検索 - LIKEとpg_bigmとPGroonga

PostgreSQLで日本語全文検索 - LIKEとpg_bigmとPGroonga

PostgreSQLアンカンファレンス@東京(2015/5/30)でPostgreSQLの日本語全文検索まわりについて紹介しようかとたくらんでいます。しかし、現時点(2015-05-25)でキャンセル待ちで、当日参加できないかもしれないので紹介しようと用意している内容をここにまとめます。

内容


PostgreSQL使3


LIKE

pg_bigm

PGroonga

like">LIKE


LIKE








使

= 
















LIKE使= 



pg_bigmLIKE使3






Wikipedia







件数 1レコードあたりのバイト数 検索速度
11,818件 17バイト 6.673ms

6msLIKE




件数 1レコードあたりのバイト数 検索速度
147,769件 14バイト 70.684ms

70msLIKE

Wikipedia


件数 1レコードあたりのバイト数 検索速度
2,461,588件 20バイト 943.450ms

1LIKE使使

LIKE
件数 1レコードあたりのバイト数 検索速度
11,818件 17バイト 6.673ms
147,769件 14バイト 70.684ms
2,461,588件 20バイト 943.450ms

LIKE


pg_bigm

PGroonga

pg_bigm


pg_bigm










使











= 






pg_bigmpg_bigmLIKELIKE

PGroongapg_bigm · Issue #2 · groonga/wikipedia-search 使Wikipedia
件数 1レコードあたりのバイト数
1,846,514件 3777バイト

注目するポイントの1つ目はインデックス作成時間です。元データのロード時間とインデックス作成時間は次の通りです。

元データのロード時間 インデックス作成時間
16分31秒 5時間56分15秒

166

1

2
検索語 ヒット数 検索時間
「PostgreSQL」または「MySQL」 361 0.107s
データベース 17168 1.224s
テレビアニメ 22885 2.472s
日本 625792 0.556s

pg_bigm0.1171222.51pg_bigm1

2620.5

pg_bigm

PGroonga


LIKEpg_bigmPGroonga

PGroonga


























使




PGroongaPostgreSQLpg_bigmpg_bigmPostgreSQL使PGroonga使PostgreSQL

PGroongaPGroongapg_bigm

pg_bigm使PGroonga


元データのロード時間 16分31秒
PGroongaのインデックス作成時間 25分37秒
pg_bigmのインデックス作成時間 5時間56分15秒

pg_bigm

PGroonga2pg_bigm1/14

使
元データロード直後のデータベースサイズ 4.0GiB
PGroongaの使用ディスクサイズ 14.0GiB
pg_bigmの使用ディスクサイズ 3.6GiB

ディスクサイズが小さい環境で動かす場合は問題になるかもしれません。

次は検索時間を確認しましょう。

検索語 ヒット数 PGroongaの検索時間 pg_bigmの検索時間
「PostgreSQL」または「MySQL」 368 0.030s 0.107s
データベース 17172 0.121s 1.224s
テレビアニメ 22885 0.179s 2.472s
日本 625792 0.646s 0.556s

PGroongapg_bigm620.6PGroonga2pg_bigm

PostgreSQLpg_bigmPGroonga


PostgreSQL3


LIKE

pg_bigm

PGroonga


LIKE1

pg_bigmPGroonga

pg_bigm


2

1



使


pg_bigmPGroonga


1






PGroongapg_shardPGroonga使PostgreSQL

PostgreSQLpg_bigmPGroongaPGroongapg_bigm