全文検索システムの Namazu の舞台裏
May 13, 2000
JUS東海勉強会
野首貴嗣
(page 1)
結論
- Namazu は全文検索システムである
- Namazu は多人数による共同開発体制
- インストールが簡便である
- 国際化を目指している
- 利用しやすいようライブラリを整備している
- 拡張性がある
そして...
(page 2)
(page 3)
Namazu の特徴 (1/2)
- 高速な全文検索のためにインデックスを作る
- インデックス作成プログラムは perl
- 検索プログラムは C
(page 4)
Namazu の特徴 (2/2)
- 多彩な検索方法
- AND検索, OR検索, NOT検索,
- 括弧によるグループ化,
- 前方一致, 中間一致, 後方一致, 正規表現
- フレイズ検索, フィールド指定の検索
- きめ細やかな日本語処理
- 文書の形式に応じたフィルタ処理が可能
- plain text, HTML, Mail/News,
- MHonArc, RFC, TeX, man, Word, PDF
(page 5)
Namazu の仕組み (1/2)
(page 6)
Namazu の仕組み (2/2)
- 文章ファイルのインデックスを生成
- 漢字コード判別・変換
- フィルタによる下処理
- 単語分割
- 検索の問い合わせ
- 漢字コード判別・変換
- 検索式の parse
- インデックスを元に結果を返す
(page 7)
環境・要望
- 多人数での作業
- 簡易なインストール
- 国際化対応
- 再利用の促進
- デバッグ環境の整備
(page 8)
初期の開発体制
初期においては高林氏1人での作業
- 開発
- 第三者からのパッチの統合
- バグ報告の受け答え
- 単なる質問まで...
個人の負荷が増大
(page 9)
現在の開発体制
多人数による開発
- 13人のコアメンバ
- 開発者用メーリングリスト講読者はさらに多数
多人数での開発を破綻なく行うには...
CVS の活用
(page 10)
(page 11)
流れの分岐
(page 12)
変更の衝突
(page 13)
簡易なインストール
- ./confiugre
- make
- make install
最近一般的なインストール手順
これらを実現するソフトウェア
(page 14)
autoconf
環境の違いを吸収するためのソフトウェア
- 環境の走査
- 各種ファイルの置換
- Makefile
- config.h
- などなど...
(page 15)
automake
autoconf に合わせた Makefile を生成するソフトウェア
- GNU Makefile standard に準拠
- 少ない記述で済む
- 複数のサブディレクトリに渡る処理も記述できる
(page 16)
国際化
日本語圏だけでなく、世界にも目を向ける
- コメントを英語で記述
- 英語のドキュメントを整備 (まだちょっと不足)
- カタログ化
(page 17)
カタログ化
メッセージをプログラムに直接埋め込むと...
- メッセージの修正はソースの修正と等価
- いろんな国の言葉に対応するのは困難
そこでカタログ化
(page 18)
GNU gettext
基本的には英語でメッセージを記述
- 文章に対応した他の言語のメッセージを表示
- 環境変数 LANG で選択可能
(page 19)
真の国際化
メッセージを翻訳するだけでは国際化とはいえない
- エンコーディングの問題
- 各国で用いられるエンコーディングに対応
- 複数言語を同時に扱うなら Unicode?
- 単語分割の問題
- 欧米圏はほぼ問題なし
- 日本語では、わかちがきが必要
- 他にも単語を区切らない国はある
(page 20)
再利用
Namazu に付随して開発されたソフトウェア - libkakasi
KAKASI をライブラリ化
- 単語の分割を library として呼びだす
- プロセスとして呼びだすより高速
ライブラリ化の重要性を認識
(page 21)
Namazu のライブラリ化
もともとは再利用を意図していないコード
拡張につぐ拡張でコードが疲弊している
- 次は再設計・再実装を
- 初めからライブラリ化を意図した実装に
Perlモジュールの作成
(page 22)
柔軟なフィルタ
様々な形式のファイルに特化した処理ができる
- 圧縮された文章 (compress / gzip / bzip2)
- manpage
- RFC / FYI / Internet-Draft
- HTML
- Mail / NetNews message (RFC822 format)
- MHonArc document
- PDF (pdftotext)
- TeX (detex)
- Excel / Word (xlHtml / wvWare)
- hnf (HyperNikkiSystem, TDS, i-system...)
API を共通化し、拡張可能
(page 23)
デバッグ
ライブラリ化作業にともない、メモリリークが問題に
- 生存時間の長いプロセスで利用できない
- Apache の mod_namazu モジュール
- mod_perl と組みあわせた CGI 実行環境
ccmalloc の活用
(page 24)
テスト環境
機能の追加がバグを呼ぶことがある
あらかじめ問題がないことを確認する手段
(page 25)
make check
namazu-${version}/tests/
- gcnmz-*
- idxdiff-*
- mknmz-*
- namazu-*
- namazu-cgi-*
22種類のチェック
(page 26)
パッケージシステム
Linux のメジャーなパッケージシステムに対応
- Red Hat 系 (rpm)
- Debian 系 (deb)
- rpm 形式を生成する spec が附属
- deb 形式を生成する rules
- Windows 用パッケージ
(page 27)
結論 (再掲)
- Namazu は全文検索システムである
- Namazu は多人数による共同開発体制
- インストールが簡便である
- 国際化を目指している
- 利用しやすいようライブラリを整備している
- 拡張性がある
そして...
(page 28)