日記
Zend_Search_HyperEstraier設計中Edit

PEARスタイルのラッパーがあるのは知っているんだけど、Zend Frameworkスタイルで作り直し中。単なるノードAPIのラッパーはだいたいできたんで、さらにそれにかぶせるラッパーを作成中。

現状の設計だと使い勝手は、

$client = new Zend_Search_HyperEstraier_Node_Client($nodeUrl, $userName, $password);
// シンプルな検索
$searchResult = $client->search('phrase');
// 複雑な検索
$condition = $client->getCondition();
$condition->clear();
$condition->setPhrase('phrase');
$condition->addAttribute('name streq value');
$condition->setOrder('@mdate');
$searchResult = $client->search(); // or $client->search($condition);
foreach ($searchResult as $item) {
echo $item->getUri() . "\n";
foreach ($item->getAttributes() as $name => $value) {
echo "$name: $value\n";
}
echo 'Keyword: ';
foreach ($item->getKeywords() as $keyword) {
echo $keyword . ' ';
}
echo "\n";
echo $item->Snippet() . "\n";
}
// ドキュメントリストを取得
$list = $client->getDocumentList($limit);
foreach ($list as $item) {
echo $item['@uri'] . "\n";
echo $item['@cdate'] . "\n";
}
// 新規ドキュメントの登録
$document = $client->createDocument([uri]);
$document->addText('text');
$document->addAttribute('name', 'value');
$document->setKeywords(array('keyword1', 'keyword2'));
$document->save();
// 既存のドキュメントの更新
$document = $client->getDocument([document id or uri]);
$document->addText('new text line');
$document->addAttribute('name', 'value');
$document->setKeywords(array('keyword1', 'keyword2'));
$document->save();
// 既存のドキュメントの削除
$document = $client->getDocument([document id or uri]);
$document->delete();

なんて感じなんだけど、なんか末端部の扱いがこなれてなさ過ぎなんで、もうちょっと練ってみよう。あと、検索条件の設定を、Hyper Estraierのマニュアルなしでできるくらい、わかりやすくできないかなー? Estraierでもそうだったけど、高機能な分、検索条件を組み立てるのが難しい(直感的じゃない)んだよな。

あと今すぐは必要ないだろうけど、estwaverみたいにインデックスへの書き込みを複数のノードに分散させる機能を持つクライアント(Zend_Search_HyperEstraier_Node_Client_Distributedとか)も考えておこう。

Published At2006-05-31 00:00Updated At2006-05-31 00:00