PGNamazuインストール顛末 −修行が足りないバージョン−
以前書いた、PostgreSQLのデータとHTMLデータを対象に全文検索したいという要求という記事では、
PostgreSQLというデータベース製品(オープンソース)のデータと
HTMLデータの両方に検索をかけられるような仕掛けがないかなーってことで、
調べたツール類をあげていました。
その調べた中で、PGNamazuという、オープンソースの検索エンジンで有名なnamazuのインデックスを
PostgreSQLから走査しちゃおうなんてツールをインストールしてみることにしたのです。
まず、PGNamazuのreadme.txtを読み、素直に make コマンドを叩きました。
コンパイルエラー(笑)
そんなすぐには出来てたまるかって感じでしょーか。(違)
とりあえず、コンパイルエラーの元であった、足りないヘッダファイルを探し出し、
Makefileのインクルードオプションに加え、再度 make。
コンパイルエラー(笑)
おいっ!w
今度は、オブジェクトファイルが足らん系のエラーです。
…ここで私は考えました。
オブジェクトファイルが足らん系のエラーは、
一つオブジェクトファイルが見つけられて追加しても、
もう一回コンパイルしなおしたらまた別のが…というパターンがたまにあります。
そして、ひょっとしたら他にもいろんなものが足りないかも…と、
ここでようやく検索エンジンで情報を集め始めます。(遅っ!)
[pgsql-jp: 30833] [summary] namazu〜PostgreSQL 連携を試してみました
少し(だいぶ?)昔の投稿ですが、前田@nanet様の
[pgsql-jp 20023] namazu とPostgreSQLの連携
に興味がありましたので、現行の環境で実行してみました。
その際の変更した点などについて、サマリとしてまとめて投稿します。
ということで、このMLにあった情報のとおり、
・Makefileにオブジェクトファイルを追加
・Makefileにインクルードファイルを追加
・ソースファイルの一部を変更
し、再度 make にてコンパイル。
コンパイル成功
やっと出来ました!
…
しかし、苦難(?)はまだ続いていました。(^^;)
つーか、こっからが本番?
PostgreSQLに、namazuのインデックスを使って検索するための関数を
登録しなければいけません。
上記のMLにも、この関数を登録するクエリがのっていましたので、
それを利用させてもらいました。
ところがその関数登録時に
ERROR: XX000: could not load library "/usr/local/pgsql/lib/pgnmz.so": /usr/local/pgsql/lib/pgnmz.so: undefined symbol: libiconv_open
LOCATION: load_external_function, dfmgr.c:136
というエラーが。
このエラー、私は
/usr/local/pgsql/lib/pgnmz.so 自体が見当たらない
もしくは
/usr/local/pgsql/lib/pgnmz.so 自体のコンパイルが失敗している
と判断し、それをベースに検索エンジンだよりで情報を集めたのですが…よくわからないでいました。
自分の力不足とはいえ、検索に時間ばかりかけているのももったいないので、
ここは詳しい人たちに訊ねることにしました。
日本PostgreSQLユーザ会のメーリングリストに訊ねることにしました。→[詳細はここから]
ここから得られた回答は
・libiconv.soがそもそもないのではないか
・コンパイル時にlibiconvをリンクしなければいけないのではないか
の2点でした。
私の予想は、はずれ気味でした。orz
というわけで、助言に従い、まず、libiconvがインストールされているかを確認。
#ldconfig -p | grep libiconv
でライブラリにlibiconvがない事を確認し、
#find / -name libiconv.*
で全ファイル検索でライブラリ自体はみつかりませんでしたが、
ソースファイルは存在するので、ソースからコンパイルすることに。
コンパイル後、
#ldconfig -p | grep libiconv
で再度、ロードできる状態になっているか確認し、
CREATE FUNCTION実行!
ERROR: XX000: could not load library "/usr/local/pgsql/lib/pgnmz.so": /usr/local/pgsql/lib/pgnmz.so: undefined symbol: libiconv_open
LOCATION: load_external_function, dfmgr.c:136
(T_T)
まだ手はある。
libiconv.soをリンクしてコンパイル!
CREATE FUNCTION実行!
CREATE FUNCTION
やった!やっとFUNCTIONの登録が出来たよ!(^^)v
これでHTMLのインデックス検索がPostgreSQL経由で出来る♪
…
だが、まだ問屋は卸さなかった。(爆)
実際に、FUNCTIONを動かしてみると、
db=# select pgnmz_score('help','/pathto/index.php','DOCUMENT');
pgnmz_score