2013-03-06 41 views
11

MongoDB 2.4 sắp tới hỗ trợ full-text search.Tìm kiếm toàn văn ở Pymongo

Chúng tôi làm điều này trong vỏ Mongo với một lệnh, chẳng hạn như

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

Bây giờ khi porting này để pymongo, chúng ta phải đối phó với thực tế là runCommand không được định nghĩa trên pymongo Collection lớp. Tôi đã có thể tìm ra những gì lệnh thực là, vì vậy đây làm việc trong vỏ:

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

mà làm việc. Nhưng điều này không chính xác cho tôi biết làm thế nào để có được điều này để làm việc trong pymongo. Tôi đã thử:

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

không hoạt động (nó nói "không tìm kiếm được chỉ định"). Tôi cũng đã cố gắng:

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

trong đó tất nhiên không thành công với: "không cmd như: Dự án".

tôi có thể có được những điều để làm việc nếu tôi chỉ sử dụng searchlimit, ví dụ

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

nhưng tôi muốn sử dụng filterproject với pymongo. Có ai nhận được tìm kiếm toàn văn làm việc với dự án và bộ lọc không?

Ngoài ra: Có thể có một cách hay để suy ra hình dạng của lệnh pymongo từ lệnh trình bao?

Trả lời

11

đặn nó ra: pymongo sử dụng đối số từ khóa cho các đối số lệnh thêm:

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

Lý do cho thông điệp lẻ lỗi "không cmd như: Dự án" là từ điển của Python là không có thứ tự, và project chủ chốt đã xảy ra lần đầu tiên khi được chuyển đến Mông Cổ.

+0

Liệu tác phẩm này với regex là tốt? như db.command ("regex", "players", search = "alice") – Jeff

+0

Tôi không quen thuộc với lệnh 'regex'. Nó không xuất hiện trên [danh sách lệnh chính thức] (http://docs.mongodb.org/manual/reference/command/) từ MongoDB. –

0

Một giải pháp thay thế là sử dụng OrderedDict. Giả sử việc thu thập và truy vấn được cho là biến trong khi các thông số bổ sung như hạn, dự báo và những người khác được đưa ra trong dict '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) 
Các vấn đề liên quan