在Apache Solr中处理德语变音符号

时间:2014-03-26 09:42:33

标签: php apache solr

我是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());
}

1 个答案:

答案 0 :(得分:0)

如果您收到消息400,那么日志中Solr端应该有一条真正的错误消息。看看那是什么,它应该指向正确的方向。

此外,比较直接从管理界面搜索文本时生成的查询以及从PHP代码搜索时生成的查询。您可能能够看到差异并确定失败的位置。