ログ日記

作業ログと日記とメモ

PostgreSQLで日本語全文検索

Senna+Ludiaは
Senna 1.0.1+Ludia 1.0.0 再インストール手順メモ Kawanet Blog II/ウェブリブログ
ここの通りにすれば特に詰まるところもなくインストール出来る。


ヘッダファイル

apt-get install postgresql-server-dev-8.1


コンパイルさえできれば後は楽すぎる…インデックス作るのも速い。


http://qwik.jp/senna/query.html
この辺とかエスケープしないといけない演算子が色々ありそうだが、sennaを知っていれば敢えてそのままでもいいか。




※ pgmecabを先に試していたがLudiaを使いたくなったので以下は途中まで


UTF-8対応のmecabを入れる。

apt-get install mecab mecab-ipadic libmecab-dev

辞書のUTF-8化。参考:http://www.hoge256.net/2008/02/99.html

cd /var/lib/mecab/dic
mkdir ipadic_utf8

/usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -o /var/lib/mecab/dic/ipadic_utf8/ -f euc-jp -t utf-8
cp ipadic/dicrc ipadic_utf8/
update-alternatives --install /var/lib/mecab/dic/debian mecab-dictionary /var/lib/mecab/dic/ipadic_utf8 100
# jumanの優先度が30、ipadicが70なのでそれ以上の優先度を指定する


PostgreSQL用関数準備

psql -f /usr/share/postgresql/8.1/contrib/tsearch2.sql dbname

http://www.emaki.minidns.net/Programming/postgres/index.html#pgmecab
ここから pgmecab-1.1.tar.bz2 をDL。

apt-get install postgresql-dev
apt-get build-dep postgresql-8.1
apt-get -b source postgresql-8.1

# -b は手抜き。…というかコマンド忘れた。


postgresql-8.1-8.1.13/build-tree/postgresql-8.1.13 がソースディレクトリになるのでpgmecabのMakefileに設定する。


MECAB_CONFIG_PATH と top_builddir を設定したら make; make install;

psql -f pgmecab.sql
# ロケールの設定
INSERT INTO pg_ts_cfg (ts_name, prs_name, locale)
VALUES ('default_utf8', 'default', 'ja_JP.UTF-8');

ALTER TABLE table_name ADD column_idx tsvector;

CREATE TRIGGER columnupdate BEFORE UPDATE OR INSERT ON table_name
FOR EACH ROW EXECUTE PROCEDURE tsearch2(column_idx, pgmecab, column);


psql の接続先を間違えてだいぶハマった…。
複数のデータベースで使いたい場合、tsearch2.sqlトランザクションが失敗する。単純にBEGIN;とEND;をコメントアウトすればエラーが大量に出るが、今のところ動いている。


あとはインデックスを作って検索用クエリを作って…。
ってところでLudiaが気になってきたのでそっちに乗り換えた。