2011-06-29 9 views
0

Sphinx 2.0.1-betaを使用しており、MVA属性をPHP-APIで更新したいと考えています。PHP-APIでsphinx MVA属性を更新するには?

「はエラーを検索:プールメモリのうち永続的なMVA値をロードするには、メソッド呼び出しこのエラーが表示されますが、私は、コマンドラインツールを使用する場合、インデックス更新は、私はちょうどこのエラーメッセージが表示されます成功したことを確認した後 "

したがって、更新プログラムは期待どおりに機能しません。

mva_updates_pool = 128M

  1. を次に我々は、クラスを実装:我々は挿入/usr/local/sphinx/etc/test.configの[searchd]の節で

    1. sql_attr_uintの値を更新してください。非常にうまく動作します。 MVA値を使用するために、このクラスを少し拡張しました。

    我々は我々がもし($ MVA)試験後$ VVの値を取得している

    function UpdateAttributes ($index, $attrs, $values, $mva=false) 
         { 
           // verify everything 
           assert (is_string($index)); 
           assert (is_bool($mva)); 
    
           assert (is_array($attrs)); 
           foreach ($attrs as $attr) 
             assert (is_string($attr)); 
    
           assert (is_array($values)); 
    
           foreach ($values as $id=>$entry) 
           { 
             assert (is_numeric($id)); 
             assert (is_array($entry)); 
             assert (count($entry)==count($attrs)); 
    
             foreach ($entry as $v) 
             { 
               if ($mva) 
               { 
               assert (is_array($v)); 
               foreach ($v as $vv) 
               assert (is_int($vv)); 
               var_dump($vv); 
               } else 
               assert (is_int($v)); 
             } 
           } 
    ... 
    

    、PHP-API-ファイルで私たちのコードをデバッグ。

擬似コード:

$attrs: 
array(1) { 
    [0]=> 
    string(12) "attributeKey" 
} 

$値:

array(2) { 

    [182371746]=> 
    array(1) { 
     [0]=> 
     array(2) { 
      [0]=> 
      int(1) 
      [1]=> 
      int(10) 
     } 
    } 

    [182371749]=> 
    array(1) { 
     [0]=> 
     array(2) { 
      [0]=> 
      int(2) 
      [1]=> 
      int(11) 
     } 
    } 
} 

  1. データ構造の例として、我々は、更新関数の引数として使用しますメソッド呼び出し: $ sphinxClient-> UpdateAttributes( 'destinationIndex'、$ attrs、$ valu es、true);

    メソッド呼び出しは、成功した場合は更新されたドキュメント(0以上)の量に対しては3、失敗した場合は-1を返します。

    このエラーが発生する理由はありますか?

+0

私は答えを出しましたが、あなたの問題に実際には当てはまらないことを見た – Rafa

答えて

0

エラーメッセージに、更新されたMVA属性が多数あり、MVAプールメモリが不足していると表示されます。

+0

はい、問題は、私はMVAプールメモリを128Mに設定し、5つまたは6つの属性のみを更新しました。これを行うことで多くのRAMを使用することは不可能です。 – chris

+0

ループや複雑なパターンで更新したことがありますか?解放された属性のメモリを再利用することは必ずしも可能ではないためです。 –