2013-03-06 15 views
11

Nadchodzące MongoDB 2.4 obsługuje full-text search.Wyszukiwanie pełnotekstowe w Pymongo

Robimy to w powłoce Mongo z polecenia, takie jak

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

Teraz przy przenoszeniu to pymongo, mamy do czynienia z faktem, że runCommand nie jest zdefiniowany na pymongo Collection klasie. Udało mi się dowiedzieć, co było komenda prawdziwy, więc pracował w powłoce:

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

którym pracował. Ale to nie mówi dokładnie, jak sprawić, by działało to w pymongo. Próbowałem:

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

który nie działał (powiedział "nie znaleziono określonego"). Próbowałem również:

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

co oczywiście kończy się niepowodzeniem: "brak takiego cmd: projekt".

mogę dostać rzeczy do pracy, jeśli mogę użyć tylko search i limit np

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

ale chciałbym używać filter i project z pymongo. Czy ktoś znalazł wyszukiwanie pełnotekstowe pracujące z projektem i filtrem?

Pomyślnie: Może istnieje dobry sposób na określenie kształtu polecenia pymongo z polecenia powłoki?

Odpowiedz

11

Zdobione: pymongo używa argumentów słów kluczowych dodatkowych argumentów polecenia:

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

Powodem dziwnym komunikatem o błędzie „Brak takich cmd: Projekt” oznacza, że ​​słowniki Pythona są nieuporządkowane, a project klucz zdarzyło się pierwsze, gdy przeszedł do mongo.

+0

Czy to praca dla regex, jak również? jak db.command ("regex", "players", search = "alice") – Jeff

+0

Nie jestem zaznajomiony z komendą 'regex'. Nie pojawia się na [oficjalnej liście poleceń] (http://docs.mongodb.org/manual/reference/command/) z MongoDB. –

0

Alternatywnym rozwiązaniem jest użycie narzędzia OrderedDict. Zakładając, że zbieranie i zapytania są podane jako zmienne natomiast dodatkowe parametry, takie jak granicznej, projekcji i innych podano w 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) 
Powiązane problemy