0

我对 Solr 很陌生,但我可能缺少一些简单的东西,但是在遵循Xavier Briand 的演示文稿后,我设置了 Symfony2、Solarium 和 Nelmio\SolariumBundle。

"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;
}

我面临以下错误。

可捕获的致命错误:传递给 ::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->createDocument() 方法没有返回正确的类型。事实上,它返回 my php 对象的一个​​实例。有谁知道我在这里哪里出错了?可能有帮助的另一件事是,即使我尝试直接传递日光浴室文档,我也会遇到异常。

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

例外是

FatalErrorException:错误:在中找不到类“Solarium_Document_ReadWrite”

我似乎在任何捆绑包中都找不到这个类,我想知道我的设置是否会导致问题。任何帮助将不胜感激。

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

4

1 回答 1

1

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

use Solarium\QueryType\Select\Result\AbstractDocument;

...

public function toSolrDocument(AbstractDocument $doc)
{

您也不能输入提示:

public function toSolrDocument($doc)
{
于 2013-03-17T11:25:38.007 回答