とあるプロジェクトで全文検索できるようにLudiaを入れてみた。インストールは普通に:
tar -xvzf ludia-0.8.0.tar.gz
cd ludia-0.8.0
./configure \
--with-senna-cfg=/usr/local/bin/senna-cfg
--with-pg-config=/usr/local/pgsql/bin/pg_config
make
sudo make install
/usr/local/pgsql/bin/psql -U postgres mydb -f pgsenna2.sql
なんでかしらんけどinstall-shに実行ビットが立ってなくてmake installの前にchmod u+x install-shする必要があった。あとはインデックスを作るだけ。
CREATE INDEX table_field1_senna_idx ON table USING fulltextb (field1);
CREATE INDEX table_field2_senna_idx ON table USING fulltextb (field2);
...
マルチカラムインデックスを使えないのが痛いのだが、とりあえずDBIx::Classで吸収する。
my $query = "hoge";
my @where;
foreach my $field qw(field1 field2 field3 field4) {
push @where, { $field => { '@@' => $query } };
}
my $rs = $schema->resultset('Hoge')->search(\@where, \%attrs);
これでとりあえず全文検索できる感じ。