2013-05-01 16 views
6

Sto cercando un modo per ordinare i risultati per valore di un campo mentre si esegue una ricerca a testo completo con mongodb 2.4.Ordinamento con ricerca full text MongoDB

mio comando di ricerca del testo simile a questa:

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

Quello che vorrei fare è qualcosa di simile:

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

posso vedere nella documentazione che esiste un parametro limite, ma non è qualcosa per ordinare i risultati di diverso da quello predefinito per punteggio di pertinenza.

Riordinare i risultati probabilmente sarà inefficiente. Qual è un buon modo per farlo?

+0

possibile duplicato di [ricerca MongoDB testo e ORDER bY] (http://stackoverflow.com/questions/19336391/mongodb-te xt-search-and-order-by) – JohnnyHK

risposta

-1

Non c'è modo di ordinare non per punteggio. Puoi solo control search results with weights, ma non lo stai davvero cercando. Ti suggerisco di usare Sphinx in questo caso. Si integra abbastanza bene con MongoDb e offre funzionalità di ricerca davvero ricche.

1

avuto lo stesso problema, è riuscito a risolvere il problema (pymongo) utilizzando al posto della roba EseguiComando l'operatore '$ meta':

# 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) 

Sembra che questo è disponibile solo from 2.6 version almeno in pymongo

anche in Mongo shell questo equivale a:

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

Anche se si ha "TypeError: il secondo elemento in ogni coppia di chiavi deve essere 1, -1, '2d', 'geoHaystack' o un altro identificatore di indice MongoDB valido". Prendi in considerazione l'installazione dell'ultima versione del driver pymongo. – scoulomb

Problemi correlati