我对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页面进入,它只是这个索引操作,我不能解决这个问题,所以配置可能没问题,我是错过理解捆绑的使用。
感谢。我将Solarium_Document_ReadWrite更改为\ Solarium \ QueryType \ Update \ Query \ Document。 – 2013-03-17 18:11:51
我遇到了另一个可能可以帮助您解决的问题。我想从同一个solr安装中运行多个站点。我已经在solr.xml中设置了多个核心,并可以在solr admin中看到它们。但是,在我的symfony2项目中,我的配置没有加载设置的核心。相反,我只是在defaultCoreName属性中的solr.xml文件中获取默认核心集。我在这里错过了另一个明显的吗? – 2013-03-17 23:19:37