Проблемы с получением данных MySql в индекс с помощью Zend_Search_Lucene

Попытка использовать Zend_Search_Lucene для поиска в базе данных MySql и отображения результатов. Выполняю следующий код и не могу понять, почему я не получаю никакой информации в свой index. Совершенно новый для PHP, MySql и Zend, но я провел последнюю неделю, пытаясь разобраться в этом самостоятельно, и исчерпал все ресурсы, которые мог найти. Во всяком случае, я повторил то, что выходит из моей базы данных, чтобы убедиться, что мой запрос работает, и, похоже, все в порядке. Он также отлично создает индексные файлы, но когда я взглянул на него с помощью Luke Toolbox, я не получил ничего, кроме списка созданных полей, заполненных гусиными яйцами. Чтобы убедиться, что я использую это правильно, я нашел код, использующий Zend_Feed, прогнал его через Lukes и получил всевозможные результаты. Также могу получить результаты из того же кода на моей тестовой странице результатов, но получаю 0 при использовании приведенного ниже кода. Кажется, я не могу проиндексировать информацию о базе данных, хотя счетчик говорит мне, что было проиндексировано 5 документов (это количество строк в моей таблице базы данных), и я не получаю никаких ошибок. Сценарий библиотеки - это просто сценарий автозагрузчика, и я установил соединение с базой данных, которое, как я подтвердил, также работает. Хотя, вероятно, я упускаю очевидное или демонстрирую, какой я на самом деле новичок, любая помощь будет очень благодарна.

<?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";
?>

person ploebach    schedule 03.03.2012    source источник


Ответы (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";
?>
person RockyFord    schedule 04.03.2012
comment
Спасибо, RockyFord. Это помогло. Я использовал дополнительный foreach только для устранения неполадок с запросом, но теперь я вижу избыточность. Никакая документация для Zend_Search, которую я смог найти, не содержала ясного представления о том, что на самом деле происходило в строке поля добавления, и я был недостаточно умен, чтобы экстраполировать это из каких-либо примеров. Теперь понятно, что вам нужно присвоить значение так же, как в массиве. Как я уже сказал, я, вероятно, упустил очевидное. Еще раз спасибо. - person ploebach; 04.03.2012
comment
Я рад, что смог помочь. Пожалуйста, нажмите на галочку, чтобы принять ответ, чтобы мы оба получили за него должное. - person RockyFord; 05.03.2012