首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pymongo全文搜索

Pymongo全文搜索
EN

Stack Overflow用户
提问于 2013-03-06 20:17:40
回答 2查看 5.8K关注 0票数 14

即将发布的MongoDB 2.4支持全文搜索

我们使用命令在mongo中执行此操作,如

代码语言:javascript
复制
db.players.runCommand("text", {
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit": 10})

现在,当将它移植到pymongo时,我们必须处理一个事实,即runCommand不是在pymongo Collection类上定义的。我能够弄清楚真正的命令是什么,所以这个命令在shell中有效:

代码语言:javascript
复制
db.runCommand({
    "text": "players", 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit": 10})

这起作用了。但这并不能确切地告诉我如何让它在pymongo起作用。我试过:

代码语言:javascript
复制
db.command({
    "text":"players", 
    "pipeline": [
        ("search","alice"), ("project",{"name":1,"_id":0}), ("limit",10)
    ]})

它不起作用(它说“没有指定搜索”)。我也试过:

代码语言:javascript
复制
db.command({
    "text": "players", 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit":10})

当然,这在以下几个方面都失败了:“没有这样的cmd: project”。

例如,如果我只使用searchlimit,我就可以工作了。

代码语言:javascript
复制
db.command({
    "text": "players", 
    "search": "alice",
    "limit": 10})

但是我想把filterproject和pymongo结合起来。是否有人使用项目和过滤器进行全文搜索?

旁白:也许有一种很好的方法可以从shell命令推断出pymongo命令的形状?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 08:02:06

计算出来: pymongo使用关键字参数作为附加命令参数:

代码语言:javascript
复制
db.command("text", "players", 
    search="alice", 
    project={"name": 1, "_id": 0}, 
    limit=10)

出现奇怪的错误消息"no这类cmd: project“的原因是,Python的字典是无序的,而当传递给mongo时,project键恰好是第一个。

票数 12
EN

Stack Overflow用户

发布于 2014-09-26 22:47:10

另一种解决方案是使用OrderedDict。假设集合和查询是作为变量给出的,而附加的参数,例如极限、投影和在dict‘params’中给出的其他参数:

代码语言:javascript
复制
params_ord = OrderedDict()
params_ord['text'] = collection
params_ord['search'] = query
for k,v in params.iteritems():
    params_ord[k] = v
db.command(params_ord)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15257146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档