[PHP-dev 197] Re: PHP4_namazu-2.1.0 patch

Youichi Iwakiri php-dev@php.gr.jp
Tue, 08 Jan 2002 17:45:57 +0900


いわきりです

tsukada@fminn.nagano.nagano.jp wrote in <20020108012152.7017B183AA@castle.fminn.nagano.nagano.jp>:
 >でも、どうも分かりにくいので、引数が多いときは、
 >  nmz_fetch_score(int result, int start, int end) 
 >または
 >  nmz_fetch_score(int result, int offset, int limit) 
 >
 >に変更しませんか?

 >違いを明確にするなら前者が良いと思いますが、

そうですね。libnmz内のnmz_fetch_*系の関数は前者の形式ですから
wrapperとしてのNamazu拡張モジュールもlibnmzに素直に値を渡す形式が
良いのかもしれません。
特にlibnmzを直接利用してきた人がnamazu拡張モジュールを利用する場合に
問題無く移行できると思います。
#ユーザ数としては多くないと思いますが

 >スクリプトを書くときは後者が使いやすいのでしょうか。

こっちは、そうだと*私は*思います。
実際にNamazuを使ったことがある人にとって、namazu-cgi, namazu-cmdの
インタフェースが提供するパラメタで先の開始ポインタと終了ポインタに
相当するものは

CGI版
max       一度に表示する検索結果の件数を指定します。 
whence    検索結果を何件目から表示するかを指定します。 

Command line options
-n, --max=NUM           一度に表示する件数
-w, --whence=NUM        表示する検索結果の先頭番号

で与えられます。

whence(offset)からmax(limit)数分取得するという形なので
Namazuのエンドユーザがnamazu拡張モジュールを使用する際に
戸惑うかもしれません。
#そこまで考えることもないかもしれませんが :-)

私自身としては、Namazu classを用意して
表面的にはnamazu拡張モジュールの提供する関数を隠蔽して
いるのでnmz_fetch_*関数のインタフェースの修正には
異論はありません。むしろlibnmzの提供するインタフェースに
併せた方が素直に思えます。
あとは利用する側のもんだいですね。

こんな風にscriptは書いてます。
#近々、NamazuClassは公開します

<?php
require_once 'namazu.inc'	// Namazu classの読み込み

$query = 'こんにちは';
$nmz_options = array (
        'index'   => array (
                '/hoge/php-users',
                '/hoge/php-dev',
                '/hoge/php-doc'
        ),
        'whence'  => 0,
        'max'     => 20,
        'pagemax' => 20,
        'lang'    => 'ja'
)

$nmz_status = Namazu::search($query, $nmz_options);
switch ($nmz_status->nhits) {
    case -3:
        my_sys_error();  // INDEX Open error 処理
        break;
    case -2:
        my_long_query(); // 「queryが長すぎます」を表示
        break;
    case -1:
        my_empty_query(); //「queryが空です」を表示
        break;
    case  0:
        my_nohits();      // 「検索のコツ」を表示
        break;
    default:
        $nmz_result = Namazu::fetch_result($nmz_stasus);
        output_function($nmz_result); // 検索結果を整形して表示
        break;
}
Namazu::destroy($nmz_status);
?>

以上です。