2013-05-01 12 views
6

Ich bin auf der Suche nach einer Möglichkeit, Ergebnisse nach Wert eines Feldes zu sortieren, während eine Volltextsuche mit mongodb 2.4.Sortierung mit MongoDB Volltextsuche

Mein Textsuche Befehl etwa wie folgt aussieht:

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

Was Ich mag würde, ist zu tun, so etwas wie:

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

ich in der Dokumentation sehen, dass ein Grenzwert Parameter vorhanden ist, aber nicht etwas, um Ergebnisse nach anderen als der Standardsortierung nach Relevanz zu sortieren.

Die Sortierung der Ergebnisse wird wahrscheinlich ineffizient sein. Was ist ein guter Weg, um dies zu tun?

+0

möglich Duplikat [MongoDB Textsuche und Bestellung von] (http://stackoverflow.com/questions/19336391/mongodb-te xt-search-and-order-by) – JohnnyHK

Antwort

-1

Es gibt keine Möglichkeit, nicht nach Punkten zu sortieren. Sie können nur control search results with weights, aber Sie suchen nicht wirklich. Ich schlage vor, dass Sie in diesem Fall Sphinx verwenden. Es integriert sich sehr gut mit MongoDb und bietet wirklich umfangreiche Suchfunktionen.

1

haben das gleiche Problem, gelang es, das Problem (pymongo), indem Sie anstelle der RunCommand Sache der '$ meta' Betreiber zu lösen:

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

Sieht aus wie dies nur from 2.6 version zumindest in pymongo verfügbar ist

auch in Mongo shell diese äquivalent zu:

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

Auch wenn Sie "TypeError: zweites Element in jedem Schlüsselpaar muss 1, -1, '2d', 'geoHaystack' oder einen anderen gültigen MongoDB Index-Spezifizierer sein". Erwäge die Installation der neuesten Version des Pymongo-Treibers. – scoulomb