Tsearch2のセットアップ -SUSE Linux 9.1 編-

PostgreSQLの追加モジュールに全文検索機能を追加する”Tsearch2″というものがあります。このモジュールは日本語には対応していないのですが、kakasiなどを使用して、分かち書きをしてあげることで日本語の全文検索が可能になるようです。これについては下記のサイトにパッチやドキュメントなどが用意されています。(もう消えてしまったようです)
PostgreSQL + Tsearch2日本語化パッチによる日本語全文検索システム

http://www.oss.ecl.ntt.co.jp/tsearch2j/

ここでは、SUSE Linux 9.1でTsearch2を使用するために必要な設定のやり方を紹介します。Tsearch2の使用方法や設定についての詳細は下記のサイトをご覧ください。ここでの設定方法も下記のサイトをもとに、各ファイルのパスをSUSE Linux 9.1に合わせて書いています。
Tsearch2 – Introduction

http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html

インストール

字句解析に必要となる辞書データを作成するために、ISpellとISpellのソースコードをYaSTを使用してインストールします。

辞書データのビルド

前項でダウンロードしたISpellのソースコードを展開し、一緒にダウンロードされたパッチデータを適用します。

> cd /usr/src/packages/SOURCES/
> tar -xjf ispell-3.2.07.tar.bz2
> ...パッチを適用する...

ISpellのソースツリー内のlanguages/englishに移動し、辞書データをビルドします。

> cd ispell-3.2.07/languages/english
> sort -u -t/ +0f -1 +0 -T /usr/tmp -o english.med english.0 english.1

“english.med”というファイルが作成されるので、ISpellの辞書データが保存されているディレクトリにコピーします。

> cp english.med /usr/lib/ispell

Tsearch2の登録

使用したいデータベースにTsearch2を登録します。この操作で、Tsearch2が利用するテーブルがいくつか作成され、デフォルトデータが登録されます。

> psql -e -f /usr/share/postgresql/contrib/tsearch2.sql db_name

ロケールの設定

pg_ts_cfgテーブルにシステムロケールの情報を追加します。SUSE Linux 9.1ではデフォルト設定ではUTF-8になっていますので、次のようなSQLを実行します。

INSERT INTO pg_ts_cfg (ts_name, prs_name, locale) VALUES ('default_english', 'default', 'ja_JP.UTF-8');

‘default_english’は設定の名前、prs_nameは使用するパーサー名でここではデフォルト、最後はロケールです。

辞書の登録

「辞書データのビルド」でビルドした辞書をTsearch2に登録します。ここでは、”en_ispell”という名前で登録します。次のSQLを実行します。

INSERT INTO pg_ts_dict (SELECT 'en_ispell', dict_init, 'DictFile="/usr/lib/ispell/english.med", AffFile="/usr/lib/ispell/english.aff",'
'StopFile="/usr/share/postgresql/contrib/english.stop", dict_lexize FROM pg_ts_dict WHERE dict_name='ispell_template');

これで、辞書が登録されました。次に、常にこの辞書を使用するように設定します。

SELECT set_curdict('en_ispell');

字句解析の設定

どのタイプの字句に、どの辞書を使用するかという設定を行います。参考にしたサイトと同じように、lhword、lpart_hword、lwordのタイプの字句に対しては、前項で登録した”en_ispell”を使用し、それ以外の字句に対しては”simple”(デフォルトで登録されています。)を使用するように設定します。

en_ispellを使用するように設定するSQL

INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name) VALUES ('default_english', 'lhword', '{en_ispell, en_stem}');
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name) VALUES ('default_english', 'lpart_hword', '{en_ispell, en_stem');}
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name) VALUES ('default_english', 'lword', '{en_ispell, en_stem}');

simpleを使用するように設定するSQL

INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'url', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'host', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'sfloat', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'uri', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'int', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'float', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'email', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'word', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'hword', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'nlword', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'nlpart_hword', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'part_hword', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'nlhword', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'file', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'uint', '{simple}');
INSERT INTO pg_ts_cfgmap VALUES ('defalut_english', 'version', '{simple}');

以上の操作でTsearch2が使用できるようになります。

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

最近の著書

  1. 基礎から学ぶ SwiftUI

最近の記事