2013-03-16 30 views
0

我对Solr非常陌生,但我可能错过了一些简单的事情,但是,已遵循Xavier Briand's演示文稿我设置了Symfony2,Solarium和Nelmio \ SolariumBundle。尝试使用Solr与Symfony2索引文档时未找到该类

"nelmio/solarium-bundle": "2.0.*@dev", 
"solarium/solarium": "3.0.*" 

为我的教义php对象实现了toSolrDocument方法。

public function toSolrDocument(\Solarium_Document_ReadWrite $doc) 
{ 
    $doc->id   = $this->getId(); 
    $doc->description = $this->getTitle(); 
    $doc->path  = "path"; 

    return $doc; 
} 

我遇到了以下错误。

Catchable Fatal Error: Argument 1 passed to ::toSolrDocument() must be an instance of Solarium_Document_ReadWrite, instance of Solarium\QueryType\Update\Query\Document given, called in Controller.php

控制器调用此toSolrDocument方法具有以下功能

public function indexItems(){ 

    $client = $this->get('solarium.client'); 

    // get an update query instance 
    $update = $client->createUpdate(); 

    // create documents 
    $documents = array(); 

    $em = $this->getDoctrine()->getManager(); 
    $repo = $em->getRepository('<Bundle>:<Object>'); 
    $items = $repo->findAll(); 


    foreach ($items as $item) { 
     $documents[] = $item->toSolrDocument($update->createDocument()); 
    } 

    // add the documents and a commit command to the update query 
    $update->addDocuments($documents); 
    $update->addCommit(); 

    // this executes the query and returns the result 
    $result = $client->update($update); 
} 

大多数这种方法的再次直接从泽维尔的介绍来了,可以清楚地看到,该方法$最新情况:> createDocument()不会返回正确的类型。实际上它返回了我的php对象的一个​​实例。有人知道我在哪里错了吗?另一件可能有帮助的事情是,即使当我尝试直接传递日光浴文档时,我也会遇到异常。

foreach ($items as $item) { 
     $rw_item = new \Solarium_Document_ReadWrite(); 
     $documents[] = $item->toSolrDocument($rw_item); 
    } 

唯一的例外是

FatalErrorException: Error: Class 'Solarium_Document_ReadWrite' not found in

我似乎无法找到这个类中的任何捆绑的,我想知道如果我的设置可能会导致问题。任何帮助将非常感激。

另外需要注意的一点是,当我运行solr jar时,我看到查询请求从我的symfony2页面进入,它只是这个索引操作,我不能解决这个问题,所以配置可能没问题,我是错过理解捆绑的使用。

回答

1

你只需要为参数使用正确的类。

use Solarium\QueryType\Select\Result\AbstractDocument; 

... 

public function toSolrDocument(AbstractDocument $doc) 
{ 

您也不能键入暗示它:

public function toSolrDocument($doc) 
{ 
+0

感谢。我将Solarium_Document_ReadWrite更改为\ Solarium \ QueryType \ Update \ Query \ Document。 – 2013-03-17 18:11:51

+0

我遇到了另一个可能可以帮助您解决的问题。我想从同一个solr安装中运行多个站点。我已经在solr.xml中设置了多个核心,并可以在solr admin中看到它们。但是,在我的symfony2项目中,我的配置没有加载设置的核心。相反,我只是在defaultCoreName属性中的solr.xml文件中获取默认核心集。我在这里错过了另一个明显的吗? – 2013-03-17 23:19:37