エラスティック検索リポジトリがどのように機能するかを理解するために、単純なカスタム リポジトリを作成しようとしています。ドキュメンテーションは非常に単純ですが、私はまだそれがどのように機能するのか理解していません。「サービス定義 "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