2013-03-16 36 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