PostgreSQL 8.3の全文検索機能(TSearch2)を日本語で利用する

(更新日: 2014/08/16)

PostgreSQL 8.3.0から、ユーザから提供されている追加機能(contrib)として利用できた全文検索機能(TSearch2)が本体に取り込まれました。

本体に取り込まれたため、PostgreSQL 8.3.0以降ではソースから構築する場合に

./configure
make
make install

と実行するだけで全文検索機能が利用できるようになりました。

TSearch2は単語単位で全文検索できます。しかし、日本語のように単語に区切りがない場合、単語に分解(形態素解析)してからインデックス化する必要があります。
# N-gramは使えません。

残念ながら日本語をそのまま扱える機能はPostgreSQL 8.3では実装されていません.しかし、TSearch2(textsearch)を日本語で利用するための追加機能がpgFoundryのプロジェクトにあります。

textsearch-ja ホームページ
http://textsearch-ja.projects.postgresql.org/index-ja.html

インストールは非常に簡単です。textsearch-jaのアーカイブに含まれているREADME.textsearch-jaの通りに実行するだけで利用できます。

README.textsearch-jaには明示的に解説してありませんが、PostgreSQL 8.3.1等のソースを展開した中にあるcontribディレクトリにtextsearch-jaディレクトリを置いて

make
sudo make install
pgsql -f textsearsh_ja.sql (textsearch_ja をインストールするDB名)

とするだけです。事前にPostgreSQL 8.3をインストールしておく必要があります。パッケージの場合、PostgreSQLのソースツリーが無いのでソースからインストールした方がインストールは簡単です。

詳しい機能や使い方はマニュアルを参照してください。
http://www.postgresql.jp/document/pg831doc/html/textsearch.html

デフォルトで全文検索が利用できるようになったのは良い事ですが、@@(全文検索用の演算子)がTSearch2で利用されているためLudia(SennaのPostgreSQL用のバインディング)の全文検索演算子が@@から%%に変更されるといった影響も出ています。

3月末にLudia 1.5.0がリリースされPostgreSQL 8.3.0に対応しています。私は開発者の方のブログを読んで@@から%%になった事を知っていましたので問題なかったですが、READMEファイルの解説が@@のままになっています。初めてLudiaを使う方も、今までLudiaを使っていた方も注意が必要です。

# postgresql-develパッケージ等に含まれるpg_config
# を利用してビルド&インストールできるパッチをMLに
# 投げると喜ばれるかも。パッチはこんな感じになると
# 思います。(注意:未テストです)

--- Makefile.orig 2008-04-06 15:11:32.000000000 +0900
+++ Makefile 2008-04-06 15:13:37.000000000 +0900
@@ -4,7 +4,14 @@
DATA = uninstall_textsearch_ja.sql
SHLIB_LINK = -lmecab

+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) –pgxs)
+include $(PGXS)
+else
subdir = contrib/textsearch_ja
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
+endif
+

Comments

comments

PostgreSQL 8.3の全文検索機能(TSearch2)を日本語で利用する」への1件のフィードバック

  1. ピンバック: 我楽多録 » Blog Archive » PostgreSQLの全文検索機能

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です