Hyper Estraier:Perl API
概要
Hyper Estraierには標準でPerl APIが用意されています。
このPerl APIを使うと、Perl上からインデックスの作成、更新、削除、検索等、Hyper Estraierを使った様々な処理を行うことが出来ます。
しかし、デフォルトではインストールされないので、使用する場合には別途インストールする必要があります。
インストール
以下のようにインストールします。
ただし、Time::HiResを使っているようなので、インストールされていない場合には事前にTime::HiResをインストールしておきます。
% cd perlnative % ./configure % make % su # make install
Perlモジュールのインストールディレクトリの指定
インストール場所を指定したい場合には--prefixで指定可能です。
しかし、このままだとPerlモジュールがツリー構造のまま入ってしまいます。
perlnativeの下にsrcディレクトリがあり、ここで適切なオプションとともにperl Makefile.PLすれば指定した場所へPerlモジュールをインストールすることが可能ですが、XSLoaderがうまく動いてくれません。
しかたないのでかなり力ずくですが、--prefixで適当な場所へインストール後、改めてsrcディレクトリでperl Makefile.PLして指定した場所へインストールし、--prefixでインストールされたEstraier.soでperl Makefile.PLしてインストールされたEstraier.soを上書きしました。
正しいインストール方法を知ってる方がいれば教えてください(/_\;)
使用方法
以下はPerl APIを使った簡単な例です。
インデックス作成
use Estraier; use OMIM::DB::Wiki; my $db = new Database; $db->open("/path_to_index", Database::DBWRITER | Database::DBCREAT) or die; for my $i (...) { my $doc = new Document; $doc->add_attr('@uri', $i->url; $doc->add_attr('@cdate', $i->created_on); $doc->add_attr('@mdate', $i->updated_on); $doc->add_attr('@title', $i->title); $doc->add_text($i->body); $db->put_doc($doc, Database::PDCLEAN) or die; } $db->close;
@uri, @title等、設定可能な属性はマニュアルを参照してください。
検索
use Estraier; my $keyword = $ARGV[0]; my $db = new Database; $db->open("/path_to_index", Database::DBREADER) or die; my $cond = new Condition; $cond->set_phrase($keyword); my $result = $db->search($cond); my $dnum = $result->doc_num(); for my $i (0..$result->doc_num) { my $doc = $db->get_doc($result->get_doc_id($i), 0); print $doc->attr('@uri'), "\n"; } $db->close;
Perl APIではutf-8でデータの受け渡しを行うので、検索キーワードはutf-8に変換して渡す必要があります。
get_doc()で得られるDocumentクラスのオブジェクトからはその他いろいろな情報が取れるのでperldoc Estraierで要確認(/_\;)