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を使いたくなったので以下は途中まで
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が気になってきたのでそっちに乗り換えた。