我是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页面,只有这个索引操作,我无法解决,所以配置可能没问题,我很想念了解捆绑的使用。
答案 0 :(得分:1)
您只需要为参数使用正确的类。
use Solarium\QueryType\Select\Result\AbstractDocument;
...
public function toSolrDocument(AbstractDocument $doc)
{
您也可以不输入提示:
public function toSolrDocument($doc)
{