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

ファイルサーバをPostgreSQLで全文検索〜1.環境構築編

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

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

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

前提

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

zenbun1a.png


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を使用するユーザに必要な環境変数を設定する.

~/.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)

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
正しく接続できれば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共有ライブラリをロードできるための設定

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

/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を編集する.
期待度大のバージョンアップ - PostgreSQL 8.3の改良点を徹底分析

wakachi.sql.in : 変更前

 LANGUAGE C STRICT;

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のインストールが失敗する.

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

/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.アプリケーション編


参考資料

kamolandをフォローしましょう


© 2019 KMIソフトウェア