私はSolrに非常に慣れていないため、おそらく簡単なものが欠けていますが、Xavier Briandのプレゼンテーションに従って、Symfony2、Solarium、およびNelmio\SolariumBundleをセットアップしました。
"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 は、Controller.php で呼び出される、Solarium_Document_ReadWrite のインスタンス、指定された Solarium\QueryType\Update\Query\Document のインスタンスである必要があります
この 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 オブジェクトのインスタンスを返します。ここで私がどこで間違っているのか誰か知っていますか? 役立つかもしれないもう 1 つのことは、Solarium ドキュメントを直接渡そうとしても例外が発生することです。
foreach ($items as $item) {
$rw_item = new \Solarium_Document_ReadWrite();
$documents[] = $item->toSolrDocument($rw_item);
}
例外は
FatalErrorException: エラー: クラス 'Solarium_Document_ReadWrite' が見つかりません
どのバンドルにもこのクラスが見つからないようで、セットアップが問題の原因ではないかと考えています。どんな助けでも大歓迎です。
注意すべきもう 1 つのポイントは、solr jar を実行しているときに、symfony2 ページからクエリ リクエストが送信されるのを確認することです。これは、このインデックス作成アクションだけで解決できないため、構成は問題ない可能性があり、使用法を理解していません。バンドルの。