Pymongo全文搜索

问题描述:

即将推出的MongoDB 2.4支持full-text searchPymongo全文搜索

我们这样做是在命令蒙戈外壳,如

db.players.runCommand("text", { 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit": 10}) 

现在移植这个时候pymongo,我们必须处理与runCommand未在pymongo Collection类中定义的事实。我能想出什么真正命令是,所以这个曾在外壳:

db.runCommand({ 
    "text": "players", 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit": 10}) 

其工作。但是这并不完全告诉我如何让它在pymongo中工作。我试过:

db.command({ 
    "text":"players", 
    "pipeline": [ 
     ("search","alice"), ("project",{"name":1,"_id":0}), ("limit",10) 
    ]}) 

哪些没有工作(它说“没有搜索指定”)。我也试过:

db.command({ 
    "text": "players", 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit":10}) 

哪一个当然会失败:“no such cmd:project”。

我可以得到,如果我只用searchlimit,例如

db.command({ 
    "text": "players", 
    "search": "alice", 
    "limit": 10}) 

,但我想用filterproject与pymongo东西的工作。有没有人得到全文搜索与项目和过滤器工作?

另外:也许有一个很好的方法来从shell命令推断pymongo命令的形状?

想通了:pymongo使用关键字参数的附加命令参数:

db.command("text", "players", 
    search="alice", 
    project={"name": 1, "_id": 0}, 
    limit=10) 

的原因奇怪的错误消息“没有这样的CMD:项目”是Python的字典是无序的,而project关键当传递给mongo时恰好是第一个。

+0

这是否工作正则表达式呢?像db.command(“regex”,“players”,search =“alice”) – Jeff 2014-03-16 02:46:10

+0

我不熟悉'regex'命令。它没有出现在MongoDB的[官方命令列表](http://docs.mongodb.org/manual/reference/command/)上。 – 2014-03-16 05:12:13

另一种解决方案是使用OrderedDict。假设采集和查询给定为变量,而其他参数如限制,投影等人在字典“PARAMS”给出:

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)