[PHP-users 10086] Re: field cache [subject] hit!

柴田俊秀 php-users@php.gr.jp
Fri, 13 Sep 2002 14:10:04 +0900


 北海道の柴田です。
 PHPのNamazu拡張モジュールについて教えてください。

下記のソースをいろいろいじったら直ったのですが、
こればバグでしょうか。

※ 行ったこと(ただし、検索キーと格納デレクトリは同じ名称)

  1.faq_targetSearch()の引数にoldItemを追加
    … 結果 OK になった
      前の検索キーを最初に追加
   (nmz_openの『今のところ同時に開けるイン
   デックス群は1つだけです。』を参考に無視
   されることを期待)
      $index = array("$GV_NAMAZUINDEX/$oldItem","$GV_NAMAZUINDEX/$Item");
  2.$indexの第1引数に最初のキーを固定的に指定
    … 結果 NG になった
      $index = array("$GV_NAMAZUINDEX/TOP","$GV_NAMAZUINDEX/$Item");
  3.$indexの第1引数にNULLを固定的に指定
    … 結果 NG になった
      $index = array("","$GV_NAMAZUINDEX/$Item");
      ----該当データの無いキーを指定してもNGです。
  4.$indexの第1引数に2回目以降のItemを固定的に指定
    … 結果 OK になった
  5.$indexの第1引数と第2引数を入れ替えて指定
    … 結果 NG になった
 
 namazuの検索は、最後の引数のみ有効になるようだ。
 こんな使い方は正常ではないと思いますがどうでしょうか。

                    記
> 
> インデックスを切り替えて、繰り返し検索を行うと、
> Apacheのerror.logに 3回目のindexのときに
>  namazu(debug): field cache [subject] hit!
>  namazu(debug): field cache [summary] hit!
>  namazu(debug): field cache [uri] hit!
> が記録され、nmz_result_field($result,$i,"subject")の返り値が
> 前回のデータになってしまいます。
> キャッシュを見ないように設定できないでしょうか。
> 
> 下記、関数を3回呼び出すと、1.2回目はOKで
> 3回目のデータが2回目のデータと同じ表示(最初のデータ)となる。
> 
> 1回目 $Item=TOP   該当件数 4件  $count=4  表示OK
> 2回目 $Item=MAIL  該当件数 2件  $count=2  表示OK
> 3回目 $Item=TERM  該当件数 1件  $count=1  表示NG(MAILのデータ)
> で検索件数はOK
> 単独で $Item=TERM のみを行うと、正常に表示される。
> TERMのデータを2件と増やしても、MAILの2件のデータが表示される。
> 
> ※ ソース抜粋
> function faq_targetSearch($Item){  //$Itemを変えて何回か呼び出す。
>     global $GV_NAMAZUINDEX;
> 
>     $index = array("$GV_NAMAZUINDEX/$Item");   
>     $nmz = nmz_open($index) or die("Couldn't open index.");
>     $sort = 'field:{subject}';
>     nmz_set_sortmethod($sort);
>     $result = nmz_search($nmz,strip_tags($Item)) or die("Query failed.");
>     $count = nmz_num_hits($result); //このヒット数はデータと一致している
>     if ($count>0){        print("\$Item=$Item<br>");
>         for ($i=0;$i<$count;$i++){
>             print(nmz_result_field($result,$i,"subject"));  //この値が???
>             print("<br>");
>         }
>     }
      nmz_free_result($result); // 検索結果保持用リソースを解放
      nmz_close($nmz); // Namazuハンドラを閉じる
> }
> ※ 環境 …どちらも同じ状態になる
> ・Linux
>   apache_1.3.26
>   namazu-2.0.10
>   php-4.2.2
>   php4_namazu-2.1.0
> ・Windows2000
>   apache_2.0.40-win32
>   nmz2010
>   php-4.2.3-Win32
>   php4.2.x-namazu-2.1.0-win
> 以上