[PHP-dev 1369] namazu ヒット数が多い時 nmz_num_hits()でゼロが返る

Ushiro ushi9999 @ yahoo.co.jp
2007年 3月 16日 (金) 16:41:12 JST


うしろと申します。
php-usersへ投稿したのですがレスがなく
また過去にNamazu用拡張モジュールの話題がdevで出ていたため、
調査経過を含めこちらに投稿させていただきます。

===============
Namazu用拡張モジュールを使用して全文検索を行っています。
ヒット数が多いキーワードで検索すると nmz_num_hits()で ゼロが返ってきてし
まい困っています。
ヒット数が多すぎるときはその旨エラーメッセージを表示したい、
ゼロならゼロと表示したいので。
要は全然ヒットしない場合と多すぎる場合を判別したいのです。

nmz_set_maxhit()で最大ヒット数を大きくすると数字は返ってくるでしょうが、
当然無駄な検索時間がかかってしまい、現実的ではありません。
(その前にタイムアウトにもなってしまいましたが)

nmz_num_hits()で、ヒット数がmaxhitより大きいときにはゼロではなく
-1などが返ってるなど、区別がつくことが希望です。

ちなみに、コマンドラインから namazu -h "keyword" を実行すると、
「ヒット数が多すぎるので無視しました」という結果が返ってきますので
結果がゼロということはないと思います。

===============
上記を2日前に投稿。その後、調べたことを書きます。

・php_namazu.cを修正できないかソースを見る。
  nmz_num_hitsの前段階の、nmz_searchの戻り値判定で
  stat=SUCCESS/ERR_FATAL以外を拾えばよいかと
  思い、そのように変更してモジュールを作ってみたが、
「多すぎて件数ゼロ」の場合もSUCCESSが返ってくることが判明。

・Namazu本体のAPI情報を探したがなく、ソースを見ると、どうも
  nmzres->hlistの中にSTATUSを持っている?
  (キーワードが複数あった場合、各々の結果を持っている?)

  →hlist(のSTATUS)を配列などで取得できる関数があればいい?

というところまで推測できたのですが、hlistの保持の仕方、
配列への変換(?)で止まっています。

何か、こうすればよい、この方がよい、その考え方は間違っているなど、
手がかりでもあれば非常にありがたいです。

よろしくお願いいたします。

===============

PHP 4.3.11
Namazu 2.0.12
Namazuエクステンション namazu-2.3.1
Apache 2.0.53

※上記はRedhatでのテスト環境ですが、
本番はFreeBSDで、それぞれ少しずつバージョンが異なりますが
同じ実行結果となります。

*-*  Syrup Factory http://www.syrup-factory.com *-*
*-*    USHIRO Kaori ushiro @ syrup-factory.com    *-*




PHP-dev メーリングリストの案内