2014-03-14 3 views
0

mongodb로 전체 텍스트 검색을 만들고 싶습니다. 다음 쿼리를 어떻게 만들 수 있습니까? 쿼리 빌더 API를 사용합니까?Doctrine MongoDB ODM 검색 쿼리

db.Item.runCommand("text", {search: "Awesome"}); 

가능합니까? 또는 네이티브 쿼리를 어떻게 수행 할 수 있습니까?

도움 주셔서 감사합니다.

답변

2

확인 텍스트 검색을 확인하여 MongoDB를 사용할 수 있습니다 첫 번째 단계는 문서의 인덱스를 생성하는 것입니다

http://docs.mongodb.org/manual/tutorial/enable-text-search/

:

 use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

    /** 
    * Class Item 
    * @MongoDB\Document(repositoryClass="Acme\StoreBundle\ItemRepository") 
    * @MongoDB\Indexes({ 
    * @MongoDB\Index(keys={"title"="text"}) 
    * }) 
    */ 
    class Item 
    { 
     /** 
     * @MongoDB\Id 
     */ 
     protected $id; 

     //... 

    } 

는 그런 다음을 보장하기 위해 스키마를 만들 수 있습니다 색인

php app/console doctrine:mongodb:schema:create 

귀하의 맞춤형 저장소 토리는 지금과 같은 명령을 조회 할 수 있습니다

http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html#custom-repository-classes

public function findFullText($searchTerm, $limit = 10) 
    { 
     $resultSet = new ArrayCollection(); 

     //-- runCommand 
     $itemResultSet = $this->getDocumentManager()->getDocumentDatabase('AcmeStoreBundle:Item')->command([ 
      'text' => 'Item', 
      'search' => $searchTerm, 
      'limit' => $limit 
     ]); 

     foreach ($itemResultSet['results'] as $itemResult) { 
      $resultSet->add($this->uow->getOrCreateDocument('\Acme\StoreBundle\Document\Item', $itemResult['obj'])); 
     } 

     return $resultSet; 
    } 

이 probaby 가장 정교한 방법이 아닙니다. 그러나 원하는 문서 세트를 제공합니다.

관련 문제