2013-05-26 11:06 by 仁伯爵

 前回に引き続き、PostgreSQLに日本語中間一致検索でインデックスを使えるようにしていく。今回は、pg_bigm の出番である。pg_trgmとは違って日本語中間一致検索のために作られているモジュールなのでとても期待できる。ただ、2013年4月5日リリースのpg_bigm20130405はPostgreSQL9.1 で動作確認が行われており「9.2以降には対応していると思われますが、動作確認していません。」言うのが開発者の公式見解である。当環境は9.2だが私の自己責任においてインストールしてみようと思う。

pg_bigmのインストール

1.pg_bigmのダウンロード

 まずは、pg_bigmプロジェクトサイトのリンクからダウンロードしてくる。


# wget http://jaist.dl.sourceforge.jp/pgbigm/58505/pg_bigm-20130405.tar.gz
 ~省略~
#
# tar -xvf ./pg_bigm-20130405.tar.gz
pg_bigm-20130405/
pg_bigm-20130405/LICENSE
pg_bigm-20130405/Makefile
pg_bigm-20130405/bigm.h
pg_bigm-20130405/bigm_gin.c
pg_bigm-20130405/bigm_op.c
pg_bigm-20130405/html/
pg_bigm-20130405/html/index.html
pg_bigm-20130405/html/pg_bigm.html
pg_bigm-20130405/html/style.css
pg_bigm-20130405/pg_bigm--1.0.sql
pg_bigm-20130405/pg_bigm.control
#
# 

2.pg_bigmのメイクとインストール

 解凍展開したソースをメイクしてインストールする。make コマンドの PG_CONFIG オプションには、pg_configへのパスを指定する。pg_configにパスが通っている環境でこのコマンドを実行する場合は、PG_CONFIG オプションは必要ない。


# make USE_PGXS=1 PG_CONFIG=/usr/pgsql-9.2/bin/pg_config
gcc -O2 -g -I/usr/include/et -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I/usr/pgsql-9.2/include/server -I/usr/pgsql-9.2/include/internal -I/usr/include/et -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  -c -o bigm_op.o bigm_op.c
gcc -O2 -g -I/usr/include/et -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I. -I. -I/usr/pgsql-9.2/include/server -I/usr/pgsql-9.2/include/internal -I/usr/include/et -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  -c -o bigm_gin.o bigm_gin.c
gcc -O2 -g -I/usr/include/et -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -shared -o pg_bigm.so bigm_op.o bigm_gin.o -L/usr/pgsql-9.2/lib -L/usr/lib64 -Wl,--as-needed  
# 
# make USE_PGXS=1 PG_CONFIG=/usr/pgsql-9.2/bin/pg_config installl
/bin/mkdir -p '/usr/pgsql-9.2/lib'
/bin/mkdir -p '/usr/pgsql-9.2/share/extension'
/bin/mkdir -p '/usr/pgsql-9.2/share/extension'
/bin/sh /usr/pgsql-9.2/lib/pgxs/src/makefiles/../../config/install-sh -c -m 755  pg_bigm.so '/usr/pgsql-9.2/lib/pg_bigm.so'
/bin/sh /usr/pgsql-9.2/lib/pgxs/src/makefiles/../../config/install-sh -c -m 644 ./pg_bigm.control '/usr/pgsql-9.2/share/extension/'
/bin/sh /usr/pgsql-9.2/lib/pgxs/src/makefiles/../../config/install-sh -c -m 644 ./pg_bigm--1.0.sql  '/usr/pgsql-9.2/share/extension/'
# 

3.PostgreSQLへの設定追加

 PostgreSQLの設定ファイルに shared_preload_libraries とcustom_variable_classes を追加するように公式ドキュメントには記載があるが、custom_variable_classes は9.2では廃止されており、configファイル追加するとPostgreSQLの起動に失敗してしまう。


# cd /var/lib/pgsql/9.2/data/
# cp -p postgresql.conf postgresql.conf.bk
# vi postgresql.conf
 ~省略~
#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------

# Add settings for extensions here
shared_preload_libraries = 'pg_bigm'# pg_bigm japanese all text search   ← 追加
#custom_variable_classes = 'pg_bigm' ← 9.2以降は不要なのでコメントアウトしています。
#
# /etc/init.d/postgresql-9.2 restart
postgresql-9.2 サービスを停止中:                           [  OK  ]
postgresql-9.2 サービスを開始中:                           [  OK  ]
#
#

4.pg_bigmをDBへ追加

 DBの拡張機能へ追加してginインデックスを追加することで全文検索が高速になる。


# psql -d testdb
パスワード:
psql (9.2.4)
"help" でヘルプを表示します.

testdb=#
testdb=# CREAT EXPTENSION pg_bigm SCHEMA testsc;
CREATE EXTENSION
testdb=#
testdb=# \dx
                   インストール済みの拡張の一覧
  名前   | バージョン |  スキーマ  |             説明             
---------+------------+------------+------------------------------
 plpgsql | 1.0        | testsc  | PL/pgSQL procedural language
(1 行)

testdb=#
testdb=#

 この状態で、検索したいテーブルのカラムにGINインデックスを作ると、日本語の中間一致検索でもインデックスが使えるようになる。ちなみに、CREATE EXPTENSION コマンドで pg_bigm の代わりに pg_trgm を指定すれば前回有効化したpg_trgm を使うこともできる。だが、pg_bigm と pg_trgm は同時にDBに追加することはできない。DBごとにどちらか一つにしておかなければならない。ともあれ、これでソースコードにLIKEで %ほにゃらら%というような指定が遠慮なくできる。良きかな。良きかな。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*


*

投げ銭はこちらへ
bitcoin :
1FtNVmXFAkwKPPz7MTcbNXzRnKJaYdMyKf

bitcoin :
1AFU37YroGt8ohmFz8nG1N2ockL56Z4hfQ

2017年10月
« 9月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
カテゴリー