ここんとこ寝不足な日々が続いています。
先週、部屋を掃除している時にサーバー機を少しずらして棚を拭いていたら
誤って落としちゃいました(+_+)
恐る恐る電源を入れてみたが HDD からお決まりの異音が・・・
というわけで、1から構築しなおしになりました。
PostgreSQL8.3.6 と Ludia のインストールに少し時間がかかったのでメモします。
必要なパッケージのインストール
yum install gcc-c++ openssl-devel yum install --enablerepo=pgdg83 postgresql-devel
mecab のインストール
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.98pre1.tar.gz tar zxvf ./mecab-0.98pre1.tar.gz cd ./mecab-0.98pre1 ./configure --with-charset=utf8 make && make install && echo "ok"
mecabの辞書をインストール(mecab-ipadic)
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20070801.tar.gz tar zxvf ./mecab-ipadic-2.7.0-20070801.tar.gz cd ./mecab-ipadic-2.7.0-20070801 ./configure --with-charset=utf8 make && make install && echo "ok"
sennaのインストール
wget http://keihanna.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz tar zxvf ./senna-1.1.4.tar.gz cd ./senna-1.1.4 ./configure && make && make install && echo "ok"
Ludiaのインストール
tar zxvf ./ludia-1.5.2.tar.gz cd ./ludia-1.5.2 ./configure エラー(+o+) find / -name pg_config /usr/bin/pg_config find / -name senna-cfg /usr/local/src/senna-1.1.4/senna-cfg /usr/local/bin/senna-cfg ./configure --with-pg-config=/usr/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg make && make install && echo "ok"
Ludia のインストール時にエラーが出てしまいました。
make all-am
make[1]: Entering directory `/usr/local/src/ludia-1.5.2'
if /bin/sh ./libtool --mode=compile --tag=CC gcc -D_REENTRANT -I. -I. -I. -DPOSTGRES83=1 -I/usr/include -I/usr/include/pgsql/server -I/usr/local/include/senna -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF ".deps/pgsenna2.Tpo" -c -o pgsenna2.lo pgsenna2.c; \
then mv -f ".deps/pgsenna2.Tpo" ".deps/pgsenna2.Plo"; else rm -f ".deps/pgsenna2.Tpo"; exit 1; fi
mkdir .libs
gcc -D_REENTRANT -I. -I. -I. -DPOSTGRES83=1 -I/usr/include -I/usr/include/pgsql/server -I/usr/local/include/senna -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF .deps/pgsenna2.Tpo -c pgsenna2.c -fPIC -DPIC -o .libs/pgsenna2.o
pgsenna2.c: In function 'pgs2build0':
pgsenna2.c:613: warning: passing argument 4 of 'IndexBuildHeapScan' makes integer from pointer without a cast
pgsenna2.c:613: error: too few arguments to function 'IndexBuildHeapScan'
make[1]: *** [pgsenna2.lo] Error 1
make[1]: Leaving directory `/usr/local/src/ludia-1.5.2'
make: *** [all] Error 2
原因はpgsenna2.c の 613行目にある模様。
warning: passing argument 4 of 'IndexBuildHeapScan' makes integer from pointer without a cast # #
IndexBuildHeapScan() の4番目の引数が・・・とのとこ。
覗いてみると、
まぁ、わけワカメ@@
ググッてみると青山ではたらくCTOのブログさんがヒットしました。ありがとう~CTOさん!
原因が IndexBuildHeapScan の引数の数か変わったことによるエラーだそうです。
Postgresのリリースノートや実際のソースコードまで追っかけて解決したようです。
ものすごく参考になりました。
vi ./pgsenna2.c
/*
* pgs2build0 is called by pgs2build, _pgs2build, pgs2buildb, _pgs2buildb,
* pgs2buildu, _pgs2buildu.
*/
Datum
pgs2build0(Relation heap, Relation index, IndexInfo *indexInfo, int flags, Oid oid_type)
{
#if defined(POSTGRES82) || defined(POSTGRES83)
IndexBuildResult *result;
#endif
build_stat bs;
double reltuples;
init_support_funcs(&bs.funcs, index);
bs.indtuples = 0;
bs.index = index_info_open(index, 1, flags);
bs.oid_type = oid_type;
reltuples = IndexBuildHeapScan(heap, index, indexInfo,
false, buildCallback, (void *) &bs);
#if defined(POSTGRES82) || defined(POSTGRES83)
result = (IndexBuildResult *) PGS2_PALLOC(sizeof(IndexBuildResult));
result->heap_tuples = reltuples;
result->index_tuples = bs.indtuples;
index_info_close(bs.index);
PG_RETURN_POINTER(result);
#else
IndexCloseAndUpdateStats(heap, reltuples, index, bs.indtuples);
index_info_close(bs.index);
PG_RETURN_VOID();
#endif
}
んで、もう一度インストール
make clean ./configure --with-pg-config=/usr/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg make && make install && echo "ok"
Ludia のインストールが完了したので
PostgreSQL に設定を追加します。
vi /var/lib/pgsql/data/postgresql.conf #追記 #ludia custom_variable_classes = 'ludia' ludia.max_n_sort_result = 10000 ludia.enable_seqscan = on ludia.sen_index_flags = 31 ludia.max_n_index_cache = 16 ludia.initial_n_segments = 512 #end ludia
PostgreSQL を再起動して、Ludia を使用するデータベースに
インデックスアクセスメソッドを登録します。
が、
ものぐさなので、template1 に流します。
su - postgres psql -f /usr/share/pgsql/pgsenna2.sql template1
後は、テスト用にテーブルとインデックスを張って動くか確認
createdb ludiatest
psql ludiatest
ludiatest=# CREATE TABLE table1 (col1 text, col2 varchar(128));
CREATE TABLE
ludiatest=# INSERT INTO table1 VALUES ('すもももももももものうち', 'あの壺はよいものだ');
INSERT 0 1
ludiatest=# INSERT INTO table1 VALUES ('ももから生まれた桃太郎', 'あの壷はよいものだ');
INSERT 0 1
ludiatest=# CREATE INDEX index1 ON table1 USING fulltext(col1);
CREATE INDEX
ludiatest=# CREATE INDEX index2 ON table1 USING fulltextb((col2::text));
CREATE INDEX
ludiatest=# SELECT * FROM table1 WHERE col1 %% 'もも';
col1 | col2
--------------------------+--------------------
すもももももももものうち | あの壺はよいものだ
ももから生まれた桃太郎 | あの壷はよいものだ
(2 rows)
ludiatest=# SELECT col1, pgs2getscore(table1.ctid, 'index1') FROM table1 WHERE col1 %% 'もも';
col1 | pgs2getscore
--------------------------+--------------
すもももももももものうち | 35
ももから生まれた桃太郎 | 5
(2 rows)
無事インストールできました。
タグ: CentOS5, XenServer5.5
good