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で要確認(/_\;)