差分表示


PostgreSQL8.3(内蔵tsearch2)を使ってファイルサーバの全文検索システムを構築する(1.環境構築編)
//parent=PostgreSQL
*ファイルサーバをPostgreSQLで全文検索〜1.環境構築編

Linuxマシンを検索用のサーバとして,ファイルサーバの全文検索を行いたい.

しかしNamazuではなぜかインデックス化が途中で終わってしまったので,
他の方法を模索していたのだが
([[RedHat9へのOracleSES10gインストール]]),
どうも何かと気に入らないため,自作することにした.

検索エンジンにはPostgreSQLのtsearch2を使うことにしたが,
PostgreSQLは8.3だとtsearch2を内蔵しているようなので,
せっかくなのでこのバージョンを使うことにした.まだベータ版ですが.

#contents

-[[ファイルサーバをPostgreSQLで全文検索〜2.アプリケーション編>ファイルサーバをPostgreSQLで全文検索〜アプリケーション編]]

**前提
-CentOS release 4.4 (Final)
-PostgreSQL 8.3 beta3 (データベースはUTF-8で作成する)
-mecab 0.96
-wakachi (SRA OSSが公開しているもの)
-Perl 5.8.5
-DBI,DBD::Pg

&ref(zenbun1a.png,100%,left)

----
*1.PostgreSQL8.3beta3のインストールと設定

**(1) インストール
ftp://ftp.sra.co.jp/pub/cmd/postgres/
から,
-postgresql-8.3beta3.tar.gz

をダウンロードする

インストール先はデフォルト(/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を使用するユーザに必要な環境変数を設定する.

&ltitle(~/.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が動いているホスト名,inspiron
,接続,192.168.0.*のアドレスからはパスワード無しで許可する(trust)

&ltitle(postgresql.conf);
--(
listen_addresses = 'inspiron'
--)

&ltitle(pg_hba.conf);
--(
host    all         all         192.168.0.0/24          trust
--)

**(5) データベースの作成
試しにデータベースを作成してみる.
--(
pg_ctl start
createdb test
--)

接続してみる.
--(
psql -d test
--)
正しく接続できればOK

----
*2.mecabのインストール
http://mecab.sourceforge.net/
から,mecabの本体と辞書
-mecab-0.96.tar.gz
-mecab-ipadic-2.7.0-20070801.tar.gz

をダウンロードする

**(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共有ライブラリをロードできるための設定
以下のファイルを作成し,

&ltitle(/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-full-text-search.tar.gz

をダウンロードする

なお以下では,PostgreSQLのコンパイル,インストールで使ったソースツリーが
-/home/setup/postgres/postgresql-8.3beta3/

配下にあるという想定です.

--(
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を編集する.~
&link(期待度大のバージョンアップ - PostgreSQL 8.3の改良点を徹底分析,http://journal.mycom.co.jp/special/2007/postgresql/018.html);

&ltitle(wakachi.sql.in : 変更前);
 LANGUAGE C STRICT;

&ltitle(wakachi.sql.in : 変更後);
 LANGUAGE C IMMUTABLE STRICT;

最後の行にimmutableを付けるという話だ.

その後,
--(
make
su
make install
--)
これでインストールは終わるが,wakachi関数を使う場合はそのデータベースに対して,
 /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のインストールが失敗する.

以下のファイルを作成し,

&ltitle(/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;
--)
実行して,現在日時が表示されればOKだ.

それでは次に,アプリケーションの導入を行う.

→ [[ファイルサーバをPostgreSQLで全文検索〜2.アプリケーション編>ファイルサーバをPostgreSQLで全文検索〜アプリケーション編]]

----
*参考資料
-&link(PostgreSQL 8.3 Documentation,http://www.postgresql.org/docs/8.3/static/index.html);
-&link(PostgreSQL 用全文検索関連ソフトウェア - SRA OSS,http://www.sraoss.co.jp/opensource/2007/full-text-search.php);


© 2023 KMIソフトウェア