0

私は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 ページからクエリ リクエストが送信されるのを確認することです。これは、このインデックス作成アクションだけで解決できないため、構成は問題ない可能性があり、使用法を理解していません。バンドルの。

4

1 に答える 1