尝试使用Solr和Symfony2索引文档时找不到类

时间:2013-03-16 18:14:22

标签: symfony solr indexing solarium

我是Solr的新手,我可能会遗漏一些简单的东西,但是我已经设置了Symfony2,Solarium和Nelmio \ SolariumBundle。{/ 3}。

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

为我的doctrine php对象实现了一个toSolrDocument方法。

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

    return $doc;
}

我遇到以下错误。

  

捕获致命错误:传递给:: toSolrDocument()的参数1必须是Solarium_Document_ReadWrite的实例,Solarium \ QueryType \ Update \ Query \ Document的实例,在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);
}

此方法的大部分内容都直接来自Xavier的演示文稿,很明显,$ update-&gt; createDocument()方法不会返回正确的类型。实际上它返回了我的php对象的一个​​实例。有谁知道我在哪里错了?另一件可能有帮助的事情是,即使我尝试直接传递日光浴室文档,我也会遇到异常。

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

例外是

  

FatalErrorException:错误:

中找不到类'Solarium_Document_ReadWrite'

我似乎无法在任何捆绑包中找到此类,我想知道我的设置是否可能导致问题。非常感谢任何帮助。

另外需要注意的一点是,当我运行solr jar时,我看到查询请求来自我的symfony2页面,只有这个索引操作,我无法解决,所以配置可能没问题,我很想念了解捆绑的使用。

1 个答案:

答案 0 :(得分:1)

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

use Solarium\QueryType\Select\Result\AbstractDocument;

...

public function toSolrDocument(AbstractDocument $doc)
{

您也可以不输入提示:

public function toSolrDocument($doc)
{