Ich habe ein Problem mit Java API für MongoDB. Ich habe eine Abfrage mit Robomongo erstellt:MongoDB Java API: Volltextsuche
db.collection.find(
{$text : {$search : "\"expression\" keyword"}},
{score : {$meta : "textScore"}}
).sort({score : {$meta : "textScore"}})
Nun möchte Ich mag die gleiche Abfrage API mit Java erstellen:
DBObject searchCommand = new BasicDBObject(
"$text", new BasicDBObject("$search", "\"expression\" keyword")
).append(
"score", new BasicDBObject("'$meta'", "textScore")
);
DBObject sorting = new BasicDBObject(
"score", new BasicDBObject("'$meta'", "textScore")
);
DBCursor result = collection.find(searchCommand).sort(sorting);
Das Problem ist, dass dieser Code funktioniert nicht. Die Abfrage:
DBObject searchCommand = new BasicDBObject(
"$text", new BasicDBObject("$search", "\"expression\" keyword")
);
funktioniert einwandfrei. Nach dem Anhängen des zweiten Teils werden alle Ergebnisse unsichtbar. Was mehr ist, diese Zeile:
DBCursor result = collection.find(searchCommand).sort(sorting);
wirft MongoException (badValue schlechte Sorte Spezifikation). Wenn ich sort() Methodenaufruf lösche, ist die Exception nicht vorhanden, aber ich habe noch keine Ergebnisse (wenn ich "score" angehängt habe).
Ich habe eine Lösung für dieses Problem gefunden, aber mit Spring. Ich möchte keine anderen Bibliotheken verwenden. Außerdem bin ich ein Anfänger in MongoDB. Danke für deine Hilfe und Zeit, Prost.
UPDATE. Problem gelöst. Anhängen von "score" an query searchCommand, das als erster Parameter von find() übergeben wurde, ist falsch. „Score“ sollte in getrenntem DBObject als zweiten Parameter von find() Methode übergeben werden, wie folgt:
DBObject search = new BasicDBObject(
"$text", new BasicDBObject("$search", "\"expression\" keyword")
);
DBObject project = new BasicDBObject(
"score", new BasicDBObject("$meta", "textScore")
);
DBObject sorting = new BasicDBObject(
"score", new BasicDBObject("$meta", "textScore")
);
DBCursor result = collection.find(search, project).sort(sorting);
Thank you very much :) Es scheint, dass ich mein Problem ein paar Momente entdeckt, bevor Sie Antwort. Wie auch immer, danke für die umfassende Erklärung. – bargro