Проблемы с получением данных MySql в индекс с использованием Zend_Search_Lucene - PullRequest
0 голосов
/ 03 марта 2012

Попытка использовать Zend_Search_Lucene для поиска в базе данных MySql и отображения результатов.Запускаю следующий код и не могу понять, почему я не получаю никакой информации в свой индекс.Совершенно новый для PHP, MySql и Zend, но я провел последнюю неделю, пытаясь выяснить это самостоятельно и исчерпал все ресурсы, которые я мог найти.Во всяком случае, я повторил, что выходит из моей базы данных, чтобы убедиться, что мой запрос работает, что, кажется, в порядке.Он также прекрасно создает индексные файлы, но когда я взглянул на него с помощью Luke Toolbox, я не получил ничего, кроме списка созданных полей, заполненных мурашками.Просто чтобы убедиться, что я использую это правильно, я нашел какой-то код с помощью Zend_Feed, прогнал его через Люка и получил всевозможные результаты.Также можно получить результаты из того же кода на моей странице результатов теста, но получить 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";
?>

1 Ответ

1 голос
/ 04 марта 2012

Похоже, у вас был дополнительный 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";
?>
...