Hyper Estraier:Perl API

最終更新日時:2009-05-26 16:58:23
Perl Hyper Estraier

概要


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

お問い合わせは 掲示板 にて。