結構苦労したり……
- FedoraCore 5
- PostgreSQL-8.1.4 (FC5のRPM)
- Senna (senna-20060619.tar.gz)
pg_senna - Postgres Binding For Sennaを参考に、しようと思ったらソースに Makefile が含まれていない。
Makefile.am と configure.ac があるので、これは autoconf, automake を使うということか。って一回も使ったことないんだけど。
以下、まったく autoconf, automake を理解していないので変なことをしている可能性大。
試行錯誤の末、リポジトリの rev.14 から以下のようにソースを修正した。
=================================================================== --- configure.ac (リビジョン 14) +++ configure.ac (作業コピー) @@ -12,6 +12,7 @@ VERSION=$PG_SENNA_MAJOR_VERSION.$PG_SENNA_MINOR_VERSION.$PG_SENNA_MICRO_VERSION AC_COPYRIGHT([Copyright (c) 2005 Daisuke Maki <dmaki@cpan.org>]) AC_CONFIG_SRCDIR([src/pg_senna.c]) +AC_CONFIG_HEADERS([src/config.h]) AM_INIT_AUTOMAKE(pg_senna, $VERSION) # Checks for programs. Index: src/pg_senna.h =================================================================== --- src/pg_senna.h (リビジョン 14) +++ src/pg_senna.h (作業コピー) @@ -34,7 +34,7 @@ #include <commands/trigger.h> #include <executor/spi.h> #include <miscadmin.h> -#include <server/utils/palloc.h> +#include <utils/palloc.h> #include <senna.h> #include <stdlib.h>
configure.ac のは autoheader コマンドが
autoheader: error: AC_CONFIG_HEADERS not found in configure.ac
とのたまうので。pg_senna.h のは pg_config コマンドが返す include path に "server/" が含まれているのでその重複を避けるため。
さらに、automake で "required file `./ltmain.sh' not found" と言われるので、/usr/share/libtool/ltmain.sh をカレントディレクトリにコピー。
この状態で
$ autoheader $ aclocal $ automake -a $ autoconf $ ./configure $ make # make install
としてインストール。すると /usr/lib/pgsql/lib 以下にインストールされてしまった。/usr/lib/pgsql 以下に入ってほしいのだが。とりあえず手動でファイルを移動。( mv pg_senna.* ../ )
あとは psql から…
\i src/pg_senna.sql SELECT pg_senna_create_index('entry', 'body'); -- senna index 作成 \timing SELECT * FROM entry WHERE id IN(SELECT 'entry'::SENNA @@ 'Plagger'); (略) Time: 16.552 ms SELECT * FROM entry WHERE body LIKE '%Plagger%'; (略) Time: 97.465 ms
対象は、Plagger の Store::DBIC で保存した全文入りの entry. 約8000レコード、6MB程度のデータ。
この程度のデータ量だと差が少ないけど、もっと大量のレコードを検索すれば差が開くはず。