postgresql 全文検索
必要なもの
postgresql-8.2.12.tar.gz(好きなバージョンでOK)
ludia-withdeps-1.5.1.tar.gz (最新バージョンで)
[mecab,mecab-ipadic,sennaがついたパッケージ]
tar xvzf ludia-withdeps-1.5.1.tar.gz
cd ./ludia-1.5.1/deps/
(mecabインストール)
tar xzvf mecab-0.97.tar.gz
cd ./mecab-0.97
./configure --with-charset=utf8
make all
make install
(mecab辞書インストール)
cd ../
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make all
make install
(sennaインストール ちょっと時間掛かる・・・)
cd ../
tar xvzf senna-1.1.3.tar.gz
cd senna-1.1.3
./configure
make all
make install
(ludiaのインストール)
cd ../../
./configure --with-pg-config=/usr/local/pgsql/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg
make all
make install
テスト用のDB作成
createdb sample2
/usr/local/pgsql/bin/psql -U postgres -f /usr/local/pgsql/share/pgsenna2.sql sample2
postgresql.confの最終行へ以下パラメータ追加
custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.seqscan_flags = 1
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512
postgresqlの再起動もしくはreload
CREATE INDEX ftext ON item USING FULLTEXT(description);
******************** 補足 ***********************************
fulltext : 正規化 + 形態素解析 (SEN_INDEX_NORMALIZE)
fulltextb : 正規化 + 2-gram (SEN_INDEX_NORMALIZE|SEN_INDEX_NGRAM)
fulltextu : ユーザ定義
って言うのをしらずにずっとfulltextを使用していた。
書いてある通り fulltextb の方が2-ngramを使用するのでこっちがいいかも
CREATE INDEX ftext ON item USING FULLTEXTB(description);
って指定するんだってw
*****************************************************************
select itemid from item where description @@'テスト'
で結果が返ってくればOK
pgmecab よりは簡単かな。
後は精度と速度かな。。。。
必要なもの
postgresql-8.2.12.tar.gz(好きなバージョンでOK)
ludia-withdeps-1.5.1.tar.gz (最新バージョンで)
[mecab,mecab-ipadic,sennaがついたパッケージ]
tar xvzf ludia-withdeps-1.5.1.tar.gz
cd ./ludia-1.5.1/deps/
(mecabインストール)
tar xzvf mecab-0.97.tar.gz
cd ./mecab-0.97
./configure --with-charset=utf8
make all
make install
(mecab辞書インストール)
cd ../
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make all
make install
(sennaインストール ちょっと時間掛かる・・・)
cd ../
tar xvzf senna-1.1.3.tar.gz
cd senna-1.1.3
./configure
make all
make install
(ludiaのインストール)
cd ../../
./configure --with-pg-config=/usr/local/pgsql/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg
make all
make install
テスト用のDB作成
createdb sample2
/usr/local/pgsql/bin/psql -U postgres -f /usr/local/pgsql/share/pgsenna2.sql sample2
postgresql.confの最終行へ以下パラメータ追加
custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.seqscan_flags = 1
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512
postgresqlの再起動もしくはreload
CREATE INDEX ftext ON item USING FULLTEXT(description);
******************** 補足 ***********************************
fulltext : 正規化 + 形態素解析 (SEN_INDEX_NORMALIZE)
fulltextb : 正規化 + 2-gram (SEN_INDEX_NORMALIZE|SEN_INDEX_NGRAM)
fulltextu : ユーザ定義
って言うのをしらずにずっとfulltextを使用していた。
書いてある通り fulltextb の方が2-ngramを使用するのでこっちがいいかも
CREATE INDEX ftext ON item USING FULLTEXTB(description);
って指定するんだってw
*****************************************************************
select itemid from item where description @@'テスト'
で結果が返ってくればOK
pgmecab よりは簡単かな。
後は精度と速度かな。。。。
※コメント投稿者のブログIDはブログ作成者のみに通知されます