差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行は
このように表示します。
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を使用するユーザに必要な環境変数を設定する.
<itle(~/.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)
<itle(postgresql.conf);
--(
listen_addresses = 'inspiron'
--)
<itle(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共有ライブラリをロードできるための設定
以下のファイルを作成し,
<itle(/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);
<itle(wakachi.sql.in : 変更前);
LANGUAGE C STRICT;
<itle(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のインストールが失敗する.
以下のファイルを作成し,
<itle(/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);