PostgreSQL8.3(内蔵tsearch2)を使ってファイルサーバの全文検索システムを構築する(1.環境構築編) ファイルサーバをPostgreSQLで全文検索〜1.環境構築編Linuxマシンを検索用のサーバとして,ファイルサーバの全文検索を行いたい. しかしNamazuではなぜかインデックス化が途中で終わってしまったので, 他の方法を模索していたのだが (RedHat9へのOracleSES10gインストール), どうも何かと気に入らないため,自作することにした. 検索エンジンにはPostgreSQLのtsearch2を使うことにしたが, PostgreSQLは8.3だとtsearch2を内蔵しているようなので, せっかくなのでこのバージョンを使うことにした.まだベータ版ですが.
前提
1.PostgreSQL8.3beta3のインストールと設定
(1) インストールftp://ftp.sra.co.jp/pub/cmd/postgres/ から,
をダウンロードする インストール先はデフォルト(/usr/local/pgsql)にしておく. tar zxf postgresql-8.3beta3.tar.gz cd postgresql-8.3beta3 ./configure gmake su gmake install /usr/sbin/adduser postgres
(2) インストール後の設定PostgreSQLを使用するユーザに必要な環境変数を設定する.~/.bash_profile に追加 export PATH=/usr/local/pgsql/bin:$PATH export PGDATA=/usr/local/pgsql/data 今後の作業のために,設定を読み込んでおく.
. ~/.bash_profile
(3) データベースクラスタの初期化今回は,UTF-8をデフォルトとして作成する.
mkdir /usr/local/pgsql/data chown postgres.postgres /usr/local/pgsql/data su - postgres initdb -D /usr/local/pgsql/data --encoding=UTF8 --no-locale
(4) 外部からの接続許可
postgresql.conf listen_addresses = 'inspiron' pg_hba.conf host all all 192.168.0.0/24 trust
(5) データベースの作成試しにデータベースを作成してみる.pg_ctl start createdb test 接続してみる. psql -d test
2.mecabのインストールhttp://mecab.sourceforge.net/ から,mecabの本体と辞書
をダウンロードする
(1) mecabのインストールtar zxf mecab-0.96.tar.gz cd mecab-0.96 ./configure make su make install
(2) 辞書のインストール (UTF-8)辞書の文字コードはUTF-8で作成する.
tar zxf mecab-ipadic-2.7.0-20070801.tar.gz cd mecab-ipadic-2.7.0-20070801 ./configure --with-charset=utf8 make su make install
(3) mecab共有ライブラリをロードできるための設定以下のファイルを作成し,/etc/ld.so.conf.d/mecab.conf /usr/local/lib ldconfigを実行する # /sbin/ldconfig これをやっておかないと,後でwakachiを使おうとしたときに ERROR: could not load library "/usr/local/pgsql/lib/wakachi.so": libmecab.so.1: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません のエラーが発生する. /usr/local/lib/libmecab.so.1 は実際には存在するのだが,それを認識してくれないという状況になる.
3.wakachiのインストールhttp://www.sraoss.co.jp/opensource/2007/full-text-search.php から,
をダウンロードする なお以下では,PostgreSQLのコンパイル,インストールで使ったソースツリーが
配下にあるという想定です.
tar zxf postgresql-full-text-search.tar.gz cd postgresql-full-text-search cp -rp wakachi /home/setup/postgres/postgresql-8.3beta3/contrib cd /home/setup/postgres/postgresql-8.3beta3/contrib/wakachi 要は,wakachiディレクトリをPostgreSQLのソースツリーのcontrib配下にコピーする.
次に,以下のページの指示に従って,wakachi.sql.inを編集する. wakachi.sql.in : 変更前 LANGUAGE C STRICT; wakachi.sql.in : 変更後 LANGUAGE C IMMUTABLE STRICT; 最後の行にimmutableを付けるという話だ. その後, make su make install /usr/local/pgsql/share/contrib/wakachi.sql を実行して関数作成の必要がある.
4.DBI,DBD::Pgのインストール今回の全文検索システムではPerlからPostgreSQLにアクセスするので, DBIとDBD::Pgを使用する.
(1) DBIのインストールCPANを使おう.
# perl -MCPAN -e "install DBI"
(2) libpq共有ライブラリをロードできるための設定これをやらないと,libpqのsoを認識できずにDBD::Pgのインストールが失敗する. 以下のファイルを作成し, /etc/ld.so.conf.d/pgsql.conf /usr/local/pgsql/lib/ ldconfigを実行する # /sbin/ldconfig
(3) DBD::PgのインストールCPANを使おう.
# perl -MCPAN -e "install DBD::Pg" これでひとまず必要な環境は整った.
(4) DBIの動作確認試しに以下のプログラムを実行してみる.#!/usr/bin/perl use DBI; my $host = "inspiron"; my $dbname = "test"; my $user = "postgres"; my $passwd = ""; my $db = DBI->connect("DBI:Pg:host=$host;dbname=$dbname", $user, $passwd) || die "DBI connect failed : $DBI::errstr"; my $st = $db->prepare("SELECT current_timestamp"); my $res = $st->execute; while (my @res = $st->fetchrow) { print "$res[0]\n"; } $st->finish; $db->disconnect; それでは次に,アプリケーションの導入を行う. → ファイルサーバをPostgreSQLで全文検索〜2.アプリケーション編
参考資料 |