Ich habe einen Index für die db erstellt.
res = yield dbEmail["emails"].create_index([("subject", pymongo.TEXT)])
jetzt von
dbEmail["emails"].find({$text: {$search: "dogs"}}, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}})
auf dem erstellten Index zu suchen, die ich gefunden funktioniert nicht Ich versuche. Die Motordokumentation besagt, dass das Filterargument in db.collection.find (filter) ein SON-Objekt ist. Wenn ich list_indexes() für meine Sammlung ausprobiere, sind es auch SON-Objekte. Aber dann
for index in (yield dbEmail["emails"].list_indexes()):
searchResults = yield dbEmail["emails"].find(index)
führt auch zu einem Fehler. Wie suchen wir den Index mit dem Motor?
edit:
Meine erste db Sammlung Niel Antwort sieht wie folgt aus:
emails = {"_id" : ObjectId("xxcxcdsfas"),"subject": "Joe owns a dog", "content": "Dogs are man's best friend", "likes": 60, "year": 2015,"language": "english"},
{"_id" : ObjectId("xxcxcdsfas"),"subject": "Dogs eat cats and dog eats pigeons too", "content": "Cats are not evil", "likes": 30, "year": 2015,"language": "english"},
{"_id" : ObjectId("xxcxcdsfas"),"subject": "Cats eat rats", "content": "Rats do not cook food", "likes": 55, "year": 2014, "language": "english"},
{"_id" : ObjectId("xxcxcdsfas"), "subject": "Rats eat Joe", "content": "Joe ate a rat", "likes": 75, "year": 2014, "language": "english"}
Nach der Indexerstellung (die erstellt wird, habe ich überprüft haben), die endgültigen Ergebnisse, die ich benötige im Gegensatz sollte so etwas wie,
{ "_id" : ObjectId("xxcxcdsfas"), "subject" : "Dogs eat cats and dog eats pigeons too", "content" : "Cats are not evil", "likes" : 30, "year" : 2015, "language" : "english", "score" : 1 }
{ "_id" : ObjectId("xxcxcdsfas"), "subject" : "Joe owns a dog", "content" : "Dogs are man's best friend", "likes" : 60, "year" : 2015, "language" : "english", "score" : 0.6666666666666666 }
der erste Teil hat eine höhere Punktzahl, weil Hund zweimal im Fach erscheint, auf einmal in dem zweiten.
I überprüft, dass der Index mit dem folgenden Code gültig ist:
for item in (yield dbEmail["emails"].index_information()).items():
print(item)
Die Antwort oder Index ist unten:
('_id_', {'v': 2, 'key': [('_id', 1)], 'ns': 'emailInfo.emails'})
('subject_text', {'v': 2, 'key': [('_fts', 'text'), ('_ftsx', 1)], 'ns': 'emailInfo.emails', 'weights': SON([('subject', 1)]), 'default_language': 'english', 'language_override': 'language', 'textIndexVersion': 3})
Sie müssen viel spezifischer sein als" funktioniert nicht ". Zeigen Sie einige Daten mit etwas, das voraussichtlich übereinstimmen wird. Zeigen Sie an, dass der erwartete erstellte Index vorhanden und gültig ist. –
@NeilLunn danke, bearbeitet die Frage. – user3407549
Was bekommen Sie eigentlich als Antwort? Du hast das Problem immer noch nicht erklärt. Was ist es? –