Поисковый запрос Doctrine MongoDB ODM

Я хочу создать полнотекстовый поиск с помощью mongodb. Как я могу создать следующий запрос. С API построителя запросов?

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

Это возможно? Или как я могу выполнить собственный запрос.

Спасибо за помощь.


person createproblem    schedule 14.03.2014    source источник


Ответы (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;

        //...

     }

Затем вы можете создать схему, чтобы убедиться, что индекс

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

Это, наверное, не самый изощренный способ. Зато предоставит вам нужный комплект документов.

person sirkohli    schedule 24.03.2014