2012-06-16 39 views
2

這個讓我很生氣。我試圖從Lucene中獲取搜索結果,但它不會表現出來。這是我在做什麼:Php Zend的Lucene熒光筆和unicode

$userQuery = Zend_Search_Lucene_Search_QueryParser::parse($_GET['query'], 'utf-8'); 
$search->results = $this->index->find($userQuery); 

然後我檢索命中,並在每次打我試圖突出匹配。

$html = $query->highlightMatches($hit->body, 'utf-8'); 

我尋找「attività」:它會找到正確的命中,但它不會強調任何東西,它會輸出完整的文本,用正確的口音在一起(讓我看到了「attività」字不亮)。

如果我忽略了highlightMatches中的'utf-8'參數,它會突出顯示attività單詞,但是「à」字符會從輸出中截斷,所以它會顯示「attivit」。這種情況下的輸出字符串是ASCII編碼的。

這是什麼錯誤!我的頁面是utf-8編碼的。我用以下邏輯添加文檔:

// Following two lines are at the initialization so they hold for all code 
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8'); 
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive() 
); 
... 
$doc->addField(Zend_Search_Lucene_Field::Text($fieldName, $fieldValue, "UTF-8")); 
... 

任何幫助非常感謝!

+0

看看這個,它可能有幫助:http://mariobrandt.de/archives/php/zend-framework-lucene-utf-8-problem-313/ – Haroon

+0

這是我的出發點。但是這些字符串在索引中正確編碼。他們得到了熒光筆的證實! – Palantir

回答

1

我在使用Zend Lucene熒光筆時遇到了同樣的問題。看起來,Zend想要將字符串轉換爲使用iconv突出顯示爲UTF-8,然後將其返回到您的視圖或進一步處理。

在我的情況下,iconv無法檢測到我的字符串已經是UTF-8,因此轉換失敗。在復位()函數Zend_Search_Lucene_Anaylsis_Analyzer_Common_Utf8下面的代碼行導致此問題:

$this->_input = iconv($this->_encoding, 'UTF-8', $this->_input); 

我只是評論它,然後它的工作。由於目前沒有轉換,所以沒有任何轉換失敗。

我希望它有幫助。

+0

這很有趣。多年來我沒有使用過這個組件,所以我不能親自嘗試它... – Palantir