Небольшая помощь в работе этой базовой функции поиска (Zend Lucene) - PullRequest
1 голос
/ 21 декабря 2009

У меня есть два php-файла, test.php:

<?php
            include("../config_conn_fordon_db.php");
            include("../config_open_db.php");
            // Fix Special Characters
            mysql_query("SET NAMES 'utf8'") or die(mysql_error()); 
            mysql_query("SET CHARACTER SET 'utf8'") or die(mysql_error());

            $root = realpath($_SERVER["DOCUMENT_ROOT"]);
            set_include_path($root.'/SV/bincgi/zend/library/');
            require_once('/library/Zend/Db/Adapter/Pdo/Mysql.php');
            require_once('/library/Zend/Search/lucene.php');

            $db = Zend_Db::factory('Pdo_Mysql', array(
            'host'     => 'localhost',
            'username' => 'user',
            'password' => 'password',
            'dbname'   => 'fordon_db'
            ));
            $query="SELECT * FROM cars_db";
            $result = $db->fetchAll($query, 2);
            echo $result[0]['headline'];


            $index = Zend_Search_Lucene::create('/hej/test', true);
            $doc = new Zend_Search_Lucene_Document();

            $doc->addField(Zend_Search_Lucene_Field::Keyword('headline', $result[0]['headline']));
            $index->addDocument($doc);
            $index->commit();

?>

И search.php:

<?php
            include("../config_conn_fordon_db.php");
            include("../config_open_db.php");
            // Fix Special Characters
            mysql_query("SET NAMES 'utf8'") or die(mysql_error()); 
            mysql_query("SET CHARACTER SET 'utf8'") or die(mysql_error());

            $root = realpath($_SERVER["DOCUMENT_ROOT"]);
            set_include_path($root.'/SV/bincgi/zend/library/');
            //require_once('/library/Zend/Db/Adapter/Pdo/Mysql.php');
            require_once('/library/Zend/Search/lucene.php');

            /*$db = Zend_Db::factory('Pdo_Mysql', array(
            'host'     => 'localhost',
            'username' => 'user',
            'password' => 'password',
            'dbname'   => 'fordon_db'
            ));
            $query="SELECT * FROM cars_db";
            $result = $db->fetchAll($query, 2);
            echo $result[0]['headline'];
            */

            $index = Zend_Search_Lucene::open('/hej/test', true);
            //$doc = new Zend_Search_Lucene_Document();
            echo "Index contains {$index->count()} documents.\n";
            $query = "";
            $hits = $index->find($query);
            echo "Search for \"$query\" returned " .count($hits). " hits.\n\n";
            echo "HEADLINE: "; echo $hits->headline;

?>

У меня здесь две проблемы, во-первых, я вообще ничего не получаю. Я не уверен, действительно ли значение 'заголовка' вставлено (или проиндексировано) так, как должно быть, есть ли способ проверить, правильно ли оно проиндексировано?

Во-вторых, я получаю это сообщение об ошибке:

Notice: Trying to get property of non-object in C:\wamp\www\SV\bincgi\zend\search.php on line 30

- последняя строка в search.php, где я повторяю заголовок ...

То, что я пытаюсь сделать, - это извлечь все поля заголовков из таблицы mysql и проиндексировать их, чтобы потом можно было их искать, но сейчас я начинаю только с одного.

Спасибо

Кстати: когда я отображаю $ result [0] ['headline'] в test.php, я получаю результат из поля таблицы mysql, так что он работает так далеко!

1 Ответ

1 голос
/ 22 декабря 2009
$hits = $index->find($query);

Возвращаемое значение является массивом; вот почему вы получаете это сообщение об ошибке.

Возвращаемое значение обычно используется в коде, подобном следующему:

foreach ($hits as $hit) {
    $title    = $hit->title;
    $contents = $hit->contents;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...