I am trying to use MongoDB full-text indexes in Morphia. I need to return a grade for each document, as well as sort the results. This is what my query looks without Morphia:
db.getCollection('disease').find( { $text: { $search: "brain" } },
{ score: { $meta: "textScore" } } )
.sort( { score: { $meta: "textScore" } } )
This works correctly and returns hits sorted by result.
I can also do this using the MongoDB Java driver directly without Morphia.
BasicDBObject textSearch = new BasicDBObject("$search", "brain");
BasicDBObject search = new BasicDBObject("$text", textSearch);
BasicDBObject meta = new BasicDBObject("$meta", "textScore");
BasicDBObject score = new BasicDBObject("score", meta);
List<DBObject> diseases = collection.find(search, score).sort(score).toArray();
Assert.assertEquals(2, diseases.size());
Assert.assertEquals("brain", diseases.get(0).get("name"));
Assert.assertEquals("benign-brain", diseases.get(1).get("name"));
I cannot figure out how to do the same in Morphia. Here is an example from the Morphia documentation ( http://mongodb.imtqy.com/morphia/1.0/guides/querying/#text-searching ):
List<Greeting> good = datastore.createQuery(Greeting.class)
.search("good")
.order("_id")
.asList();
Assert.assertEquals(4, good.size());
The example does not return a result and orders "_id". I see no way to handle the $ meta operator in Morphia. Has anyone done something like this?
source
share