Personal tools
You are here: Home サーバー Pingサーバー PostgreSQLで全文検索
Navigation

今の天気
  14℃ 41% 1024hPa WNW 3m
福岡地方の今の天気
« November 2008 »
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
最近のログイン

Papasan
2008/11/22 11:45

Guest
2008/11/12 15:50

seko
2008/11/11 20:05

Reiko
2008/11/02 16:58

hage88
2008/10/19 17:39

Peter
2008/10/06 21:22

猫さん。
2008/10/06 04:19

 
Document Actions

PostgreSQLで全文検索

by Papasan last modified 2008-11-19 16:37

インストール済みのPostgreSQL 8.2.5 + Ludia 1.4.0 で全文検索ができるようにする。

必要なパッケージの取得と展開

mecab-0.96、mecab-ipadic-2.7.0-20070801(辞書)、senna-1.0.9、ludia-1.4.0が同梱されたお買い得な(?)パッケージ(ludia-withdeps-1.4.0.tar.gz)をダウンロード します。

ダウンロードしたパッケージは、postgresql-8.2.5.tar.gzと同じく/usr/local/src/ にでも置きましょう。:

  # su - postgres
  $ cd /usr/local/src/
  $ tar -zxf ludia-withdeps-1.4.0.tar.gz  

MeCabのインストール

形態素解析をして「分かち書き」(何のことだか分かりませんが)を行うMeCabをインストールします。:

  $ cd ludia-1.4.0/deps/
  $ tar -zxf mecab-0.96.tar.gz
  $ cd mecab-0.96/
  $ ./configure --with-charset=utf8
  $ make
  $ su
  # make install
  # exit

MeCab-ipadicのインストール

MeCab用辞書のインストールをします。:

  $ cd ../
  $ 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
  # exit

Sennaのインストール

全文検索エンジンのSenna(セナと発音)をインストールします。:

  $ cd ../
  $ tar -zxf senna-1.0.9.tar.gz
  $ cd senna-1.0.9/
  $ ./configure
  $ make
  $ su
  # make install
  # exit

Ludiaのインストール

全文検索エンジンSennaを利用し、データベース内のテキスト情報を高速検索するLudiaのインストールをします。:

  $ cd /usr/local/src/ludia-1.4.0/
  $ ./configure --with-pg-config=/usr/local/pgsql/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg
  $ make
  $ su
  # make install

インデックスアクセスメソッドの登録

メソッドの登録はデータベース毎に行います。:

  $ /usr/local/pgsql/bin/psql -U postgres -f /usr/local/pgsql/share/pgsenna2.sql ping  (注 pingはcreatedbコマンドで作成したデータベース名)

postgresql.confファイルの編集

/usr/local/pgsql/data/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を再起動します。:

  # /etc/init.d/postgresql reload

全文検索用インデックスの作成

全文検索用インデックスはテーブルの項目毎に作成します。:

  $ psql ping
  ping=# CREATE INDEX pingupdate_entrydescription ON pingupdate USING FULLTEXT(entrydescription);

検索テスト

papasan奥さん で検索してブログのエントリーURLを取り出します。:

  ping=# SELECT entryurl FROM pingupdate WHERE entrydescription @@'papasan';

                                                  entryurl                                                 
  ---------------------------------------------------------------------------------------------------------
   http://rd.yahoo.co.jp/rss/l/blog/myblog/rss2/item/*http://blogs.yahoo.co.jp/classiclll_jp/47727602.html
   http://papasan.org/papablog/278
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=249
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=239
   http://papasan.org/papablog/286
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=252
   http://lightson.dip.jp/blog/seko/1241
   http://lightson.dip.jp/blog/seko/1239
   http://papasan.org/papablog/267
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=244
   http://colin-cube.com/blog/article.php?id=77
   http://hlf.homeip.net/xoops/modules/weblog/details.php?blog_id=89
   http://owa.as.wakwak.ne.jp/zope/coreblog/175
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=223
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=243
   http://plaza.rakuten.co.jp/nxuser/diary/200707150002/
   http://lightson.dip.jp/blog/seko/1342
   http://papasan.org/papablog/329
   http://lightson.dip.jp/blog/seko/1352
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=264
   http://papasan.org/papablog/374
   http://www.hage88.com/xoops/modules/weblog/details.php?blog_id=277
   http://lightson.dip.jp/blog/seko/1403
   http://lightson.dip.jp/blog/seko/1411
   http://lightson.dip.jp/blog/seko/1415
   http://lightson.dip.jp/blog/seko/1424
   http://papasan.org/papablog/402
   http://papasan.org/papablog/409
   http://lightson.dip.jp/blog/seko/1444
   http://petersworks.dyndns.org/blog/?p=37
   http://papasan.org/papablog/429
   http://lightson.dip.jp/blog/seko/1476
   http://lightson.dip.jp/blog/seko/1484
   http://papasan.org/papablog/442
   http://owa.as.wakwak.ne.jp/zope/coreblog/202
   http://papasan.org/papablog/451
   http://papasan.org/papablog/461
   http://lightson.dip.jp/blog/seko/1522
   http://lightson.dip.jp/blog/seko/1543
   http://papasan.org/papablog/480
   http://papasan.org/papablog/481
  (41 rows)

  ping=# SELECT entryurl FROM pingupdate WHERE entrydescription @@'奥さん';

                         entryurl                        
  -------------------------------------------------------
   http://gotanda.blog43.fc2.com/blog-entry-83.html
   http://gotanda.blog43.fc2.com/blog-entry-89.html
   http://d.hatena.ne.jp/PEPPERMINT/20070818#p1
   http://plaza.rakuten.co.jp/nxuser/diary/200709290000/
   http://dynanikki.exblog.jp/6459288/
   http://dynanikki.exblog.jp/7264933/
   http://lightson.dip.jp/blog/seko/1544
  (7 rows)

その他