|
先週、NTT データが GPL ライセンスでリリースした LudiaTMを試用したメモ。 PostgreSQL の Senna ドライバというか、Senna の PostgreSQL バインディングというか、 要は、PostgreSQL から Senna の全文検索エンジンを透過的に利用するために、 インデックスアクセスメソッドと演算子を追加してくれるモジュールです。 ⇒ 別のポストに 具体的な使い方 をまとめておきました。 contrib に入っている DBlink とか他のモジュールと同じように .so 形式になっていて、 既存の PostgreSQL のデータベースに追加導入できるので、思った以上にお手軽です。 CREATE FUNCTION/OPERATOR で導入したデータベースにのみ影響があるので、 Ludia をインストールしても、PostgreSQL のソース・バイナリ本体や、 同じサーバ内でも他のデータベースインスタンスには影響を与えません。 PostgreSQL の標準ではインデックスアクセスメソッドとして btree を使いますが、 Ludia を導入すると、fulltext(MeCab版)か fulltextb(N-gram版)の 2つのインデックスアクセスメソッドが利用できるようになります。 以下のようなSQL文で、既存テーブルにインデックスを張ることができます。 CREATE INDEX index1 ON table1 USING btree (col1); ここで Senna の転置インデックスを作成しているはずなのですが、かなり速いです。 インデックスを張った状態の INSERT 速度も、実用上全く問題ないようです。 インデックスが張れれば、@@ 演算子を使って検索できます。 SELECT * FROM table1 WHERE col1 like '%もも%'; 通常の用途なら、上記の他に特別な専用関数を覚える必要もありません。 INSERT・UPDATE・DELETE などの操作も通常の SQL 文を発行すれば、 自動的に Senna 側にも反映されるそうです。シンプルで分かりやすい。 少し特殊な全文検索を行いたい場合は、Senna の演算子 も利用できるようです。 手元では、以下の環境で動きました。 CPU: Intel Core Duo T2300 1.66GHz メモリ: 512MB OS: Debian (testing) Linux 2.6.11 MeCab: 不使用(⇒形態素解析せずN-gramにした) Senna: 0.8.1 Ludia: 0.8.0 PostgreSQL: 8.1.4 PostgreSQL は、apt-get でインストールしたものです。 (昔は LOCALE が要注意だったけど、最近は直ってるのかな?) Senna・Ludia はソースから入れました。 また、Ludia のコンパイル時に cc1plus コマンドが必要だったので、 『apt-get install g++』でインストールしました。 以下は ludia-0.8.0.tar.gz 内の README ファイルより引用。 概要 DROP INDEX→CREATE INDEX も相当速いので、REINDEX は要らないですね。 ただし、DROP INDEX しても Senna の転置インデックスファイルが pgdata/main/base/*/*.SEN* あたりに残ってしまうので、 ⇒ pgs2destroy()関数で一括削除できるそうです。ドキュメントにないけど。 pg_class テーブルで使用中のファイルを確認しながら削除するしかないか。 ※「Senna」は「セナ」です。「センナ」ではありません。>自分 |
| << 前記事(2006/10/17) | ブログのトップへ | 後記事(2006/10/18) >> |
| タイトル (本文) | ブログ名/日時 |
|---|---|
PHPでタグクラウドを生成する方法 – ワードの重み付け (前編)
SEOの手法としてブログでよく使用されているタグクラウドですが、 今回はPHPで生成する方法を紹介します。 タグクラウドを生成するにはキーワードに重み付けが必要です。 タグの入力欄を設けてユーザーに入力してもらう形がベストなのですが タグが付いていないテキストからタグクラウドを作って欲しいという要望もたまに発生します。 その場合どうするか? テキストに対して『形態素解析』を行いワード毎を細切れにする必要があります。 PHPで実現する場合、大きく2つの方法が考えられます。 サーバー... ...続きを見る |
携帯サイトをつくろう。 2009/08/07 19:17 |
| 内 容 | ニックネーム/日時 |
|---|---|
pgs2destroy()という関数を呼ぶと、drop後の残骸となったsenna転置インデックスを一括削除してくれるですよ。 |
ludia 2006/10/18 05:17 |
ありがとうございます。 |
ゆうすけ 2006/10/18 11:08 |
| << 前記事(2006/10/17) | ブログのトップへ | 後記事(2006/10/18) >> |