我是Apache Solr的新手。我正在使用Solr PHP客户端在Solr和我的PHP Web应用程序之间进行交互。
我面临的问题是德国变形金刚字符。每当我尝试搜索其中包含变音字符的字符串时,Solr会抛出异常,如下所示:
exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request'
in C:\SolrPhpClient\Apache\Solr\Service.php:338
Stack trace: #0 C:\SolrPhpClient\Apache\Solr\Service.php(1170):
Apache_Solr_Service->_sendRawGet('http://localhost...') #1 C:\Apache24\htdocs\MyProject\results.php(42):
Apache_Solr_Service->search('f?r', 0, 10) #2 {main}
正如您所见,德语“für”显示为“f?r”
我尝试使用iconv()和htmlentities()来隐藏它,但这些返回false或为空。
这是我的代码:
$query = "für"; //string with German umlaut
try {
//instantiate a Solr object
$solr = new Apache_Solr_Service(SOLRHOST, SOLRPORT, SOLRNAME);
// Check if Solr is running
if (!$solr->ping()) {
echo 'Solr service not responding!';
exit;
}
// I have tried these functions
// $query = iconv("UTF-8", "ISO-8859-15//TRANSLIT",$query);
// $query = htmlentities($query,ENT_QUOTES,'UTF-8');
//run the query
$results = $solr->search($query, 0, 10); // exception occurs here
$numDocs = $results->response->numFound;
$docs = $results->response->docs;
// Check if there are any results
if (empty($numDocs) || $numDocs <= 0) {
print_r($docs);
echo "No records found!!";
} else {
echo ("No. of docs:".$numDocs."<br/>");
print_r($docs);
echo "records found!!";
}
} catch (Exception $e) {
$log->error($e->getMessage());
echo($e->__toString());
}
答案 0 :(得分:0)
如果您收到消息400,那么日志中Solr端应该有一条真正的错误消息。看看那是什么,它应该指向正确的方向。
此外,比较直接从管理界面搜索文本时生成的查询以及从PHP代码搜索时生成的查询。您可能能够看到差异并确定失败的位置。