【问题标题】:Doctrine MongoDB ODM search queryDoctrine MongoDB ODM 搜索查询
【发布时间】:2014-04-19 10:34:13
【问题描述】:

我想用 mongodb 创建一个全文搜索。如何创建以下查询。使用查询构建器 API?

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

这可能吗?或者如何执行原生查询。

感谢您的帮助。

【问题讨论】:

    标签: php mongodb symfony doctrine-orm doctrine-mongodb


    【解决方案1】:

    确保为您的 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;
    
            //...
    
         }
    

    然后就可以创建schema来保证索引了

    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;
        }
    

    这可能不是最复杂的方法。但它会为您提供所需的文件集。

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 2015-04-10
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2014-08-05
      • 2012-02-06
      • 2017-08-13
      • 1970-01-01
      相关资源
      最近更新 更多