1

エラスティック検索リポジトリがどのように機能するかを理解するために、単純なカスタム リポジトリを作成しようとしています。ドキュメンテーションは非常に単純ですが、私はまだそれがどのように機能するのか理解していません。「サービス定義 "fos_elastica.manager" が存在しません。」というエラーが表示されます。これまでのところ、コントローラーを初期化する方法がわからないため、問題はコントローラーにあると思います。また、カスタムリポジトリの構成と作成した単純なクエリが正しい方法であるかどうかを知りたいです。

検索を試みるたびに、この構成でこのエラーが発生します。

 The service definition "fos_elastica.manager" does not exist.

これはこれまでの私の構成です: //app/config.yml

fos_elastica:
    clients:
        default: { host: localhost, port: 9200 }
    indexes:
         sava:
            client: default
            types:
                blog:
                    mappings:
                        id:
                            type: integer
                        body : ~
                        title : ~
                        tags: ~
                    persistence:
                        identifier: id
                        driver: orm
                        model: sava\BlogBundle\Entity\TblPost
                        finder: ~
                        provider: ~
                        listener: ~
                        repository: sava\BlogBundle\SearchRepository\TblPostRepository

これは私のコントローラーアクションです:

namespace sava\BlogBundle\Controller;

//custom querys
use FOS\ElasticaBundle\Manager\RepositoryManager;
use FOS\ElasticaBundle\Repository;
//
use Symfony\Component\DependencyInjection\ContainerBuilder;

class TblPostController extends Controller
{
        public function getPostAction(Request $request)
    {   
         $container = new ContainerBuilder();
         $repositoryManager = $container->get('fos_elastica.manager');

         $repository = $repositoryManager->getRepository('BlogBundle:TblPost');

        $items2 = $repository->matchExact($categoria,$searchQuery );


         return $this->render('savaBlogBundle:TblPost:index.html.twig', array(
                    'results' => $items2, 'entities' => $items2
        ));
    }

これは私の投稿リポジトリです:

<?php

namespace sava\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

use FOS\ElasticaBundle\Repository;

class TblPostRepository extends FOS\ElasticaBundle\Repository
{
    public function matchExact($campo, $searchQuery) {


         //$finder = $this->get('fos_elastica.finder.sava.blog');

        $query = new Query();
        if($searchQuery=='')
        {
            $innerQuery = new Query\MatchAll();
        }
        else{
           $innerQuery = new Query\Match();
        $innerQuery->setField( $campo  , array('query' => $searchQuery));
        }
        $query->setQuery($innerQuery);
        $query->setSize(1000000);
        $query->setExplain(true);

        return $this->find($query);
    }  
}

yml を使用しているので、これは私の tblpost.orm であるため、エンティティを生成しました。

get postaction を実行するたびに、コンテナーが見つからないというメッセージが表示され、適切に intiaze する方法の例が表示されません。また、これはカスタム クエリを作成する方法ですか?

編集1:

だから私はこれを変更しました:

    $container = new ContainerBuilder();
    $repositoryManager = $container->get('fos_elastica.manager');

これに:

    $elastica = $this->container->get('fos_elastica.manager');// single entry point, no fancy services    
    $SearchRepository = $elastica->getRepository('savaBlogBundle:TblPostRepository');// single type

そして、このエラーが発生します:

 No search finder configured for sava\BlogBundle\Entity\TblPostRepository
4

2 に答える 2

3

私はちょうど同じ問題を抱えていました。ソウルションは、代わりにsavaBlogBundle:TblPostRepositoryエンティティを使用する必要があるということです。たとえば、次のようになります。

$SearchRepository = $elastica->getRepository('savaBlogBundle:TblPost`)
于 2015-02-03T20:15:21.493 に答える
0

問題のタイトルの致命的なエラーに従って、 ここにリンクの説明を入力してください

なぜその間違いが起きたのかという主な問題は、(エンティティの教義構成) と fos_elastica で同じ TblPostRepository を割り当てたことです。

于 2016-05-20T07:08:18.187 に答える