【发布时间】:2014-04-19 10:34:13
【问题描述】:
我想用 mongodb 创建一个全文搜索。如何创建以下查询。使用查询构建器 API?
db.Item.runCommand("text", {search: "Awesome"});
这可能吗?或者如何执行原生查询。
感谢您的帮助。
【问题讨论】:
标签: php mongodb symfony doctrine-orm doctrine-mongodb
我想用 mongodb 创建一个全文搜索。如何创建以下查询。使用查询构建器 API?
db.Item.runCommand("text", {search: "Awesome"});
这可能吗?或者如何执行原生查询。
感谢您的帮助。
【问题讨论】:
标签: php mongodb symfony doctrine-orm doctrine-mongodb
确保为您的 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;
}
这可能不是最复杂的方法。但它会为您提供所需的文件集。
【讨论】: