2013-05-01 10 views
6

Poszukuję sposobu sortowania wyników według wartości pola podczas wyszukiwania pełnotekstowego za pomocą mongodb 2.4.Sortowanie za pomocą wyszukiwania pełnotekstowego MongoDB

Moje polecenie wyszukiwania tekst wygląda mniej więcej tak:

db.books.runCommand("text", { search: "science" }) 

Co chciałbym zrobić coś takiego jak:

db.books.runCommand("text", { search: "science", "sort": "rating" }) 

widzę w dokumentacji, która istnieje parametr limitu, ale nie coś do sortowania wyników według sortowania innego niż domyślny według wyniku trafności.

Porządkowanie wyników prawdopodobnie będzie nieefektywne. Jaki jest dobry sposób na zrobienie tego?

+0

możliwe duplikat [MongoDB wyszukiwania tekstu i aby przez] (http://stackoverflow.com/questions/19336391/mongodb-te xt-search-and-order-by) – JohnnyHK

Odpowiedz

-1

Nie można sortować według punktów. Możesz tylko control search results with weights, ale to nie jest to, czego faktycznie szukasz. Proponuję użyć w tym przypadku Sphinx. Całkiem dobrze integruje się z MongoDb i zapewnia naprawdę bogate możliwości wyszukiwania.

1

miał ten sam problem, udało się rozwiązać ten problem (pymongo) stosując zamiast rzeczy RunCommand się '$ meta' Operator:

# create text index 
db.collection.ensure_index([("textField", "text")], name = "Text_search_index")  
# query  
queryDict = { "$text": { "$search": ""science"}}  
# cursor 
cursor = db.collection.find(queryDict, {'score': {'$meta': 'textScore'}, "_id":1}).sort([('score', {'$meta': 'textScore'})]).limit(limit_value) 

Wygląda to jest dostępne tylko from 2.6 version przynajmniej w pymongo

również Mongo powłoki to równoważne:

db.collection.ensureIndex({"textField":"text"})  
queryDict = { "$text": { "$search": "science"}}  
db.collection.find(queryDict, {'score': {'$meta': 'textScore'}}).sort({'score': {'$met 
a': 'textScore'}}).limit(100) 
+0

Również jeśli "TypeError: drugi element w każdej parze kluczy musi być 1, -1," 2d "," geoHaystack "lub inny poprawny specyfikator indeksu MongoDB". Rozważ zainstalowanie najnowszej wersji sterownika pymongo. – scoulomb

Powiązane problemy