2012-03-03 114 views
0

嘗試使用Zend_Search_Lucene搜索MySql數據庫並顯示結果。運行下面的代碼,不知道爲什麼我沒有收到任何信息到我的索引。 PHP,MySql和Zend相當新穎,但上週我花了一個多周的時間來嘗試解決這個問題,並且耗盡了我所能找到的所有資源。無論如何,我回應了我的數據庫中出現的內容,以確保我的查詢能夠正常工作。它也創建了索引文件,但是當我用Luke工具箱查看它時,除了創建了填充gooseggs的字段列表之外,我什麼也得不到。爲了確保我正確地使用它,我找到了一些使用Zend_Feed的代碼,並通過Lukes運行並獲得了各種結果。也可以從我的結果測試頁上的相同代碼獲得結果,但在使用下面的代碼時獲得0。似乎我無法獲得數據庫信息索引,雖然計數告訴我5個文檔已被索引(這是我在我的數據庫表中的行數),我沒有得到任何錯誤。庫腳本只是一個自動加載器腳本,我在那裏設置了我已經確認的db連接。雖然很可能我錯過了顯而易見的事實,或者展示了我真正的新手,但是任何幫助都會非常感激。謝謝。使用Zend_Search_Lucene將MySql數據轉換爲索引的問題

<?php> 
require_once('scripts/library.php'); 

require_once ('Zend/Search/Lucene.php'); 

$index = Zend_Search_Lucene::create('./docindex'); 

$sql = ('SELECT * FROM news'); 

foreach ($db->query($sql) as $row){ 

echo $row ['author']; 

echo $row['headline']; 

echo $row ['source']; 
} 
foreach ($row as $document){ 

$document = new Zend_Search_Lucene_Document(); 

    $document->addField(Zend_Search_Lucene_Field::Text ('author', $docAuthor)); 
    $document->addField(Zend_Search_Lucene_Field::Text ('headline', $docHeadline)); 
    $document->addField(Zend_Search_Lucene_Field::Text ('source', $docSource)); 
    $document->addField(Zend_Search_Lucene_Field::Unstored ('contents', $docStory)); 

$index->addDocument($document); 
} 
    $index->commit(); 
echo $index->count()." documents have been indexed.\n"; 
?> 

回答

1

它看起來像你有一個額外的foreach()這是不是真的做任何事情,我不能看到你的數據變量分配,試試這個應該是八九不離十:

<?php 
require_once('scripts/library.php'); 
require_once ('Zend/Search/Lucene.php'); 

$index = Zend_Search_Lucene::create('./docindex'); 

$sql = ('SELECT * FROM news'); 

foreach ($db->query($sql) as $row) { 

    echo $row ['author']; 

    echo $row['headline']; 

    echo $row ['source']; 

    $document = new Zend_Search_Lucene_Document(); 

    //you use an unindexed field for the id because you want the 
    //id to be included in the search results but not searchable 
    $document->addField(Zend_Search_Lucene_Field::unIndexed('id', $row['id'])); 
    $document->addField(Zend_Search_Lucene_Field::Text('author', $row ['author'])); 
    $document->addField(Zend_Search_Lucene_Field::Text('headline', $row['headline'])); 
    $document->addField(Zend_Search_Lucene_Field::Text('source', $row ['source'])); 
    $document->addField(Zend_Search_Lucene_Field::Unstored('contents', $row['docStory'])); 

    $index->addDocument($document); 
} 
$index->commit(); 
echo $index->count() . " documents have been indexed.\n"; 
?> 
+0

謝謝,RockyFord。那就是訣竅。我使用了一個額外的foreach只是爲了查詢疑難解答,但現在我可以看到冗餘。 Zend_Search沒有任何文檔可以找到,對於「添加字段」行中實際發生的情況很清楚,我沒有足夠的智能來推斷任何示例。現在它是有道理的,你需要分配的值就像你在一個數組中。正如我所說,我很可能錯過了明顯的。再次感謝。 – ploebach 2012-03-04 16:42:52

+0

我很高興能夠提供幫助。請點擊複選標記接受答案,以便我們都可以獲得讚譽。 – RockyFord 2012-03-05 03:28:48