GemのrdocをHyperEstraierのノードに登録する
RubyからHEを使うには、P2PノードのAPIを使うようだ。
しかし、rdocをHyperEstraierで検索できるようにする - jitteの日記の手順で登録したページをノード側から参照する方法がよくわからなかった。
APIで新規登録すればいいんだろうけど・・・。
試行錯誤の結果、ノードをcasketに作るとcasket/_node/node_nameのようにサブディレクトリに配置されるので、
estcmd gatherでこのサブディレクトリを直接指定すればOKだった。
estcmd -apn -il ja -sd casket/_node/rdoc /Library/WebServer/Documents/rdoc/
こんな感じ。手順を最初からたどると以下のようになる。
P2Pノードの初期化、起動
cd /Library/WebServer/CGI-Executables rm -rf casket estmsater init casket estmaster start casket
P2Pノードの設定
ブラウザから http://localhost:1978/ を開き、rdocノードを作成する。
rdocの登録
P2Pサーバが起動したままだと登録コマンドがタイムアウトしてしまうので、停止しておく。
MacPortsで入れた場合はestmaster startで起動するとフォアグラウンドのままなので、Ctrl+Cで止めるとよい。
*1
登録処理自体は、以下のようなコマンドで行う。
estcmd -apn -il ja -sd casket/_node/rdoc /Library/WebServer/Documents/rdoc/
インクリメンタル検索に使えるように、オプションに-apnをつけている。こうすると英文でも単語区切りではなく文字区切りで検索できるようになる。
登録結果をcgiから確認
スクリプトは前回書いたとおり設置しておく。estseek.conf は以下のようにする。
index casket/_node/rdoc ... replace: ^file:///Library/Ruby/Gems/1.8/doc/{{!}}http://localhost/rdoc/
http://localhost/cgi-bin/estseek.cgi で検索できるようになっているはず。P2Pサーバが起動しているとやはりタイムアウトしてしまうので、止めておく。
ちなみに、HEのドキュメントにはインクリメンタル検索する方法が書かれているが、その通りにやるとうまくいかなかった。*.htmlをcgi-binの下に置くのがまずいらしく、ドキュメントルートに移してポスト先をcgi-bin/estseek.cgiに変えれば動いた。
登録結果をAPIから確認
MacPortsはRubyのライブラリをインストールしてくれないので、手動でインストールしておく。今度は当然、P2Pサーバを起動しておく。
require 'estraierpure' include EstraierPure node = Node.new node.set_url("http://localhost:1978/node/rdoc") cond = Condition.new cond.set_phrase("rollback") nres = node.search(cond, 0); rdoc = nres.get_doc(0) rdoc.attr_names.each do |x| puts "#{x}\t#{rdoc.attr(x)}" end
*1:デーモンになっている場合はestmaster stop casketとすると良いと思うが未確認