pg_rast: PostgreSQL で Rast 全文検索

国産全文検索システム Rast の PostgreSQL バインディング pg_rast が開発されています。
PostgreSQL のテーブルと Rast のデータベースが紐付けられて、
INSERT文でテーブルにレコードを追加するだけで自動でRast側も更新されるので、
透過的でRastを意識せずに済むのが秀逸です。早期の正式リリースに期待!

http://blog.postgresql.jp/28

pg_rast のインストールの前に、Rast 本体のインストール手順は↓を参照。
http://kawa.at.webry.info/200508/article_2.html

続けて、pg_rast については↓から入手します。
http://pgfoundry.org/projects/pgrast/
現時点では、pg_rast のインストールには PostgreSQL 8.0.3 のソースも必要?

●ダウンロードしたソース
――――――――――――――――――――――――――――――――――――
ftp://ring.ocn.ad.jp/pub/misc/db/postgresql/source/v8.0.3/postgresql-base-8.0.3.tar.bz2
ftp://ring.ocn.ad.jp/pub/misc/db/postgresql/source/v8.0.3/postgresql-opt-8.0.3.tar.bz2
http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/pgrast/pg_rast/
  ⇒pg_rast については、まだ正式パッケージがリリースされていないので後述。
――――――――――――――――――――――――――――――――――――

●PostgreSQL 8.0.3 をコンパイル/インストールする
――――――――――――――――――――――――――――――――――――
bzcat postgresql-base-8.0.3.tar.bz2 | tar xf -
bzcat postgresql-opt-8.0.3.tar.bz2 | tar xf -
cd postgresql-8.0.3
./configure --prefix=/usr/local/pgsql-8.0.3 \
--enable-multibyte=UNICODE --disable-locale \
--enable-syslog --with-maxbackends=64 --disable-odbc \
--without-perl --without-java --without-tcl \
--without-tk --without-python --without-CXX
gmake
su root -c "gmake install"
――――――――――――――――――――――――――――――――――――

●PostgreSQL 8.0.3 を起動する
――――――――――――――――――――――――――――――――――――
su - postgres
/usr/local/pgsql-8.0.3/bin/initdb -E UNICODE -D /pg_data
/usr/local/pgsql-8.0.3/bin/pg_ctl -D /pg_data start
――――――――――――――――――――――――――――――――――――
⇒本当はpostgresql.confやpg_hba.confの設定も行うけど、割愛

●pg_rast をダウンロード~インストールする
――――――――――――――――――――――――――――――――――――
mkdir pg_rast/
cd pg_rast
wget -O Makefile http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/~checkout~/pgrast/pg_rast/Makefile?rev=1.4
wget -O pg_rast.c http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/~checkout~/pgrast/pg_rast/pg_rast.c?rev=1.7
wget -O pg_rast.sql.in http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/~checkout~/pgrast/pg_rast/pg_rast.sql.in?rev=1.2
wget -O test.pl http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/~checkout~/pgrast/pg_rast/test.pl?rev=1.3
vi Makefile
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
PG_CPPFLAGS += -Wno-unused -I/usr/local/apr-0.9.6/include/apr-0 -I/usr/local/rast-0.2.0/include
SHLIB_LINK += -Wl,-rpath,/usr/local/rast-0.2.0/lib -L/usr/local/rast-0.2.0/lib -lrast
PGXS = $(shell /usr/local/pgsql-8.0.3/bin/pg_config --pgxs)
top_builddir = /home/kappe/download/200508/postgresql-8.0.3
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
  ⇒各パッケージをソースから入れているため、Makefileの書き換えが必要です。
gmake
su root -c "gmake install"
ldd /usr/local/pgsql-8.0.3/lib/pg_rast.so
  ⇒インストールされた.so共有ライブラリのリンク状況を確認しておきます。
――――――――――――――――――――――――――――――――――――

●pg_rast の初期設定
――――――――――――――――――――――――――――――――――――
/usr/local/pgsql-8.0.3/bin/createuser -PW -U postgres rastest
⇒rastestユーザを作成しています。
/usr/local/pgsql-8.0.3/bin/createdb -E UNICODE -U rastest rastest_db
⇒rastest_dbデータベースを作成しています。
/usr/local/pgsql-8.0.3/bin/createlang -U postgres plpgsql rastest_db
  ⇒rastest_dbでplpgsqlを利用できるように設定します
/usr/local/pgsql-8.0.3/bin/psql -U postgres rastest_db
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
\i pg_rast.sql
\quit
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
⇒pg_rast で提供される pg_rast_createdb などの FUNCTIONは、
 postgres(スーパーユーザ権限)でのみ登録できます
――――――――――――――――――――――――――――――――――――

●pg_rast 利用のテスト
――――――――――――――――――――――――――――――――――――
/usr/local/pgsql-8.0.3/bin/psql -U rastest rastest_db
CREATE TABLE test1 ( uid serial, value text, primary key( uid ));
SELECT pg_rast_createdb( '/tmp/test1', 'test1', 'uid', 'value' );
⇒予め /tmp/test1 ディレクトリは存在しない状態にしておくこと。
   postmaster が稼動しているユーザ(例:postgres)権限で作成されます。
INSERT INTO test1 ( value ) VALUES ( 'Hello World!' );
INSERT INTO test1 ( value ) VALUES ( 'PostgreSQL: open source relational database system.' );
INSERT INTO test1 ( value ) VALUES ( 'Rast: A full-text search system' );
INSERT INTO test1 ( value ) VALUES ( 'pg_rast: full text searching on PostgreSQL' );
⇒test1テーブルを更新するだけで、自動的にRastデータベースも更新されます
SELECT * FROM test1 WHERE value LIKE '%system%';
⇒通常のLIKE句で検索した場合
SELECT * FROM test1 WHERE uid IN (SELECT pg_rast_search( '/tmp/test1', 'system' ));
⇒pg_rast 経由で検索した場合
――――――――――――――――――――――――――――――――――――

●ベンチマークテストスクリプトの実行
――――――――――――――――――――――――――――――――――――
/usr/local/pgsql-8.0.3/bin/psql -U rastest rastest_db
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
set client_encoding="EUC_JP";
\i mytest.sql
\quit
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
――――――――――――――――――――――――――――――――――――
  ⇒pg_rast の make 時に、test.pl から mytest.sql が生成されています。
   ただし、rast のデータベースを格納するディレクトリのパス指定が
   デフォルトでは誤っているので、予め適宜書き換える必要があります。
   指定したディレクトリは pg_rast_createdb 実行時に作成されます。
   既に存在するディレクトリを指定した場合はエラーとなります。
  ⇒mytest.sql デフォルトでは、100万行の膨大なデータが自動生成されています。
   あまりに長いので、ベンチマーク処理完了まで結構な時間がかかります。
  ⇒データベースはUNICODEとしていますが、mytest.sqlの中身はEUC_JPなので、
   予めclient_encodingを設定しておく必要があります。設定しておかないと
   「invalid byte sequence for encoding "UNICODE"」エラーが発生します。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

なるほど(納得、参考になった、ヘー)

この記事へのコメント

この記事へのトラックバック