2014-03-14 115 views
0

我想用mongodb創建全文搜索。我如何創建以下查詢。使用查詢生成器API?學說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; 

     //... 

    } 

然後,您可以創建模式,以保證index

php app/console doctrine:mongodb:schema:create 

在您的自定義reposi保守黨你現在可以查詢這樣的命令:

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不是最複雜的方式。但它會爲您提供所需的一組文檔。