Миграция из Zend_Lucene в Solr - PullRequest
1 голос
/ 19 января 2011

В нашем проекте (на основе Zend Framework) мы должны найти замену стандартному Zend_Lucene.Сейчас я пытаюсь реализовать Solr с PHP Solr Client в нем.У нас есть 2 таблицы, в которые мы берем данные: категории и предложения.

В Zend_Lucene добавление данных для индексации происходит следующим образом:

/*Code above we create new index and take data from mysql
And here are the old methods:
offer - is array with query results
*/


$to_index = "{$offer["name"]} {$offer["type"]} {$offer["description"]}";

 $doc = new Zend_Search_Lucene_Document();
 $doc->addField( Zend_Search_Lucene_Field::Text('text', $to_index, "utf-8") );
 $doc->addField( Zend_Search_Lucene_Field::Keyword('cat_id', $offer["cat_id"]) );
 $doc->addField( Zend_Search_Lucene_Field::Keyword('type', "offer") );
 $doc->addField( Zend_Search_Lucene_Field::Keyword('id', $offer["id"]) );
 $doc->addField( Zend_Search_Lucene_Field::UnIndexed('created', time()) );

$this->index->addDocument($doc);

/*End of old code*/

Те же методы, что и для категорий /

В Solr и PHP Solr Client я изменил этот код (используя пример schema.xml по умолчанию):

$to_index = "{$category["name"]}";

$doc = new Apache_Solr_Document();
$doc->text = $to_index;
$doc->type = "category";
$doc->id = $category["id"];
$doc->created = time();

try {
     $this->solr->addDocuments($doc);
     $this->solr->commit();
     $this->solr->optimize();
}
catch ( Exception $e ) {
     echo $e->getMessage();
}

Но поиск по индексу дает мне 0!У меня есть подозрение, что Солр не делает правильный индекс.(Но при создании индекса нет сообщений об ошибках или исключений).Также я бы попытался дать Solr только текст и идентификаторы в методах.Но результат был тот же!

Что я делаю не так?Правильно ли я изменил методы Zend_Lucene?

1 Ответ

2 голосов
/ 19 января 2011

Я бы порекомендовал вам использовать «DataImportHandler», встроенный в Solr, для импорта данных из базы данных в механизм Solr.

Он выполнит эту работу за вас, и вы сможете настроить «полный импорт»"который будет импортировать всю базу данных и" дельта-импорт ", который будет просто импортировать новые данные из базы данных.Вы также можете настроить «удалить», чтобы удалить удаленные данные базы данных.

...