MongoDB ODM搜索查询


Doctrine MongoDB ODM search query

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

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

这可能吗?或者如何执行本机查询。

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

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