2006-03-08 (Wed)

Trac からリポジトリ内全文検索やってみた

リポジトリの全文検索 with HyperEstraier プラグイン ver 0.1 を試してみた。

この WeekBuildのHACK日記 は他にも色々と Trac のハックをされているので、Trac フリークにはお勧め。ページランクアップにも貢献しておきたい :-)

さて本題。HyperEstraier 検索プラグインは、主に Windows ユーザ向けに説明されている感じなので、せっかくだから Unix 系でもやってみましたよっていうご紹介。

環境は Trac0.9.4 on Debian/Sarge。まず最初に必要なもののインストールから。

HyperEstraier は大昔にソースから入れたので省略。Debian Etch だとすでにパッケージ化されていたはずなので、apt-get で入ると思うけどそうじゃない人はソースから make install して下さい。

次に、この EGG 系の拡張機能を利用するためには setuptools というのが必要らしいのでインストール、なんだけど、パッケージ化されている setuptools は 古くて動かない ので、自前でインストール。これは簡単。

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py

んで、さっきのサイトから searchhyperestraier-plugin を落としてきて、展開したディレクトリ内に SearchRepositoryWithHyperEstraier-0.1-py2.3.egg というファイルがあるので、こいつを trac のデータディレクトリ内の plugins というディレクトリに配置。

そこまで出来たら、estraier の転置インデックスの作成。

まず適当なディレクトリにリポジトリをチェックアウトしておきます。例では /home/data/est/ 内に色々データを置いておく事に。

$ cd /home/data/est/
$ svn co /path/to/repos/trunk repos

次に、以下のようなバッチファイルを用意して転置インデックスを作成。もともと紹介されている方法では、リポジトリを毎回エクスポートしていて無駄に感じたので、svn update をして更新するように変更した。

#! /bin/bash

DIR=/home/data/est/repos
IDX=/home/data/est/idx

PATH=/usr/bin:/usr/local/bin

svn update $DIR
cd $DIR
svn ls -R $DIR | estcmd gather -cl -ft -sd $IDX -

バッチを実行して転置インデックスが出来あがったら、ちゃんと検索出来るかどうかを確認しておく。

estcmd search -vx -sf /home/data/est/idx hoge

みたいな感じで。ホントに hoge って入れても多分何も出てこないから注意だよ!うまくいくようなら、crontab に登録しておいて適当な間隔で実行するように設定しておく。

後は conf/trac.ini を設定して準備終わり。

[searchhyperestraier]
index_path = /home/data/est/idx
replace_left = /home/data/est/repos
url_left = /trunk
estcmd_encode = euc-jp
estcmd_arg = search -vx -sf -ic euc-jp

locale が EUC-JP の場合を念頭に入れて、estcmd_encode と estcmd_arg をそれぞれ euc-jp に指定しています。多くの場合はこれで平気でしょうけど、自分の locale にあわせないと日本語での検索は出来ないはず。

最後に Apache を再起動して検索メニューでリポジトリってのが出てきたら万事OK。

あとはバッチファイルの内容をもちっと修正したい所。テストめんどいので今日はここまで。

  • gather だけじゃなくって purge や optimize もした方が良いと思う
  • update されたときだけ、estcmd を実行した方が環境にヤサシイ

ちなみに、svn ls -R はちょっとだけ重たいので、嫌だったら find $DIR -name .svn -prune -o -print | estcmd みたいにしてもほぼ同じ結果を得られる。svn ls -R はどちらかというと、Windows ユーザを意識して書いてみた。Windows でパイプ処理が動くかどうかは知らないんだけど。

Posted by Kyosuke Takayama at 2006-03-08 (Wed) 14:26 printable version

この記事へのコメント

1) weekbuild (2006-03-09 (Thu) 00:23)

トラバありがとうございます。初トラバなので慌てました。(^^;
Windowsでもパイプはあるんですが、gatherの際に-fxで外部コマンドを実行するとエラーになっちゃうみたいです。-fx必要なければupdateの方がよさげですね。

2) takayama (2006-03-09 (Thu) 10:45)

こちらこそ便利な情報ありがとうございます!
パイプ+-fx でエラーになるのは、estraire のバグなんでしょうかね。確認してみます。

svn -ls -R の結果を一時ファイルに出力しておいて、estcmd でそのファイルを読み込むっていう方法もありそうなので、それでうまくいけばそれでも良いかもしれません。

私も初めて知らない人からトラックバックもらった時は結構焦りました!!(笑)

トラックバック

トラックバックURL: http://espion.just-size.jp/mt-tb.cgi/557


この記事のリンク元

 
Copyright (C) Kyosuke Takayama, All rights reserved.