2015-07-01 24 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