2015-07-01 52 views
0

沒有找到我的問題的答案。PHP Solr 4.10:SolrServerError「for input string:10,00」addDocument with setBoost(10)

我使用pecl SolR PHP與SolR服務器4.10.1。 SolrServerError發生在我嘗試添加文檔時使用提升集。該消息是:「對於輸入字符串:‘10,0’」代號:500

我做了下面的代碼:

//$boostDocument = 10.00; 
$doc->setBoost($boostDocument); 

foreach($data as $cle=>$valeur) { 
    if(is_array($valeur) == TRUE) { 
     foreach ($valeur as $val) { 
      $doc->addField($cle, $val); 
     } 
    } else { 
     $doc->addField($cle, $valeur); 
    } 
} 

try { 
    $this->solrClient->addDocument($doc, true); 
} catch (SolrServerException $e) { 

} 

下面是結果的文件我嘗試添加:

array(3) { 
["document_boost"]=> 
    float(10) 
    ["field_count"]=> 
    int(3) 
    ["fields"]=> 
    array(3) { 
    [0]=> 
    object(SolrDocumentField)#21 (3) { 
     ["name"]=> 
     string(2) "id" 
     ["boost"]=> 
     float(0) 
     ["values"]=> 
     array(1) { 
     [0]=> 
     string(6) "752891" 
     } 
    } 
    [1]=> 
    object(SolrDocumentField)#22 (3) { 
     ["name"]=> 
     string(4) "type" 
     ["boost"]=> 
     float(0) 
     ["values"]=> 
     array(1) { 
     [0]=> 
     string(3) "CAT" 
     } 
    } 
    [2]=> 
    object(SolrDocumentField)#23 (3) { 
     ["name"]=> 
     string(11) "designation" 
     ["boost"]=> 
     float(0) 
     ["values"]=> 
     array(2) { 
     [0]=> 
     string(23) "Good guy designation" 
     [1]=> 
     string(0) "" 
     } 
    } 
    } 
} 

沒有$document->SetBoost(10.00)沒有發生錯誤。

回答

0

這是由PHP中的語言環境設置引起的,因爲某些語言環境使用「,」作爲小數點分隔符(其中美國英語使用「。」),並且這會影響在生成Solr請求時從float到casting的投射在模塊內部。

在發出請求之前使用setlocale(LC_NUMERIC, "C")編譯PHP時,可以強制使用C的默認轉換,或者可以直接將boost設置爲字符串(我還沒有嘗試過)(setBoost(「10.00」))或setBoost(10))。

您可以使用setlocale(LC_NUMERIC, 0)獲取當前設置,以便在請求完成後將其設置回來。

+0

太棒了!我試了一下,一切都很順利。謝謝。 – GagouClub