Ludia インストール

移転しました。

pgestraier で思ったより速度がでなかったためLudiaを試してみる。

必要なソフトウェアの入手

Ludiaが必要とするソフトウェアを下記のURLから入手してインストールする必要があります。

* PosgreSQL : http://www.postgresql.org/
* Senna : http://qwik.jp/senna/FrontPageJ.html
* MeCab : http://mecab.sourceforge.jp/

Mecab インストール

$ wget http://globalbase.dl.sourceforge.jp/ludia/27667/ludia-withdeps-1.3.1.tar.gz
$ tar zxvf ludia-withdeps-1.3.1.tar.gz
$ cd ludia-1.3.1/deps
$ tar zxvf mecab-0.96.tar.gz
$ cd mecab-0.96
$ ./configure --with-charset=utf8 && make
$ su 
# make install
# ldconfig
# exit

$ cd ludia-1.3.1/deps
$ tar xvzf mecab-ipadic-2.7.0-20060707.tar.gz
$ cd mecab-ipadic-2.7.0-20060707
$ ./configure --with-charset=utf8 && make
$ su 
# make install
# ldconfig
# mecab ← 動作確認

Senna インストール

$ wget http://osdn.dl.sourceforge.jp/senna/27317/senna-1.0.9.tar.gz
$ tar zxvf senna-1.0.9.tar.gz
$ cd senna-1.0.9
$ ./configure
$ make
$ su
# make install

Ludia インストール

$ wget http://keihanna.dl.sourceforge.jp/ludia/27666/ludia-1.3.1.tar.gz
$ tar zxvf ludia-1.3.1.tar.gz
$ cd ludia-1.3.1
$ ./configure
$ make
$ su
# make install
# ldconfig

DB準備

$ initdb -D data --encoding=UNICODE --no-locale
$ vi data/postgresql.conf
-----
custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 100000
ludia.enable_seqscan = on
ludia.sen_index_flags = 31
-----
$ pg_ctl -D data -l postmaster.log start
$ createdb -E UTF8 testgis

Senna設定

$ psql -f /usr/local/pgsql/share/pgsenna2.sql testgis

テストテーブル作成

create table geoaddr(
   id             serial primary key,
   addr_name      varchar(256) UNIQUE
);

その後データ挿入し、以下のように上記で作成したDBにINDEXを作成する。

CREATE INDEX addrindex ON geoaddr USING fulltextb((addr_name::text));

## fulltextb : 正規化 + 2-gram (SEN_INDEX_NORMALIZE|SEN_INDEX_NGRAM)

SCORE でソートするSQL

Ludiaでは検索一致率をSCOREで数値かしている。
このSCOREの取得、ソートのSQL例を以下に記載する。

-- ctid は固定. 'addrindex'は作成したINDEX名
select addr_name, pgs2getscore(ctid, 'addrindex') as score from geoaddr where addr_name @@ 1 order by score DESC limit 10;