PHP Solr 4.10 : SolrServerError "for input string : 10,00" addDocument with setBoost(10)

PHP Solr 4.10 : SolrServerError "for input string : 10,00" on addDocument with setBoost(10)

没有找到我的问题的答案。

我在 SolR 服务器 4.10.1 中使用 pecl SolR PHP。当我尝试添加带有提升集的文档时发生 SolrServerError。消息是:"For input string: "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) 不会发生错误。

这是由 PHP 中的语言环境设置引起的,因为某些语言环境使用“,”作为小数点分隔符(美式英语使用“.”),这会影响从浮点数到字符串的转换Solr 请求在模块内部生成。

在发出请求之前使用 setlocale(LC_NUMERIC, "C") 编译 PHP 时,您可以强制使用 C 的默认转换,或者可能(我还没有尝试过)将 boost 设置为字符串直接代替(setBoost("10.00") 或 setBoost(10)).

您可以使用setlocale(LC_NUMERIC, 0)获取当前设置,这样您就可以在发出请求后将其重新设置。