Я пытаюсь использовать полнотекстовые индексы MongoDB в Morphia. Мне нужно вернуть оценку для каждого документа, а также отсортировать результаты. Вот как выглядит мой запрос без Morphia:
db.getCollection('disease').find( { $text: { $search: "brain" } },
{ score: { $meta: "textScore" } } )
.sort( { score: { $meta: "textScore" } } )
Это работает правильно и возвращает попадания, отсортированные по счету.
Я также могу сделать это с помощью Java-драйвера MongoDB напрямую без Morphia.
// search with the Java driver
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"));
Я не могу понять, как сделать то же самое в Morphia. Вот пример из документации Morphia (http://mongodb.github.io/morphia/1.0/guides/querying/#text-searching):
List<Greeting> good = datastore.createQuery(Greeting.class)
.search("good")
.order("_id")
.asList();
Assert.assertEquals(4, good.size());
Пример не возвращает счет и упорядочивается по «_id». Я не вижу способа справиться с оператором $meta в Morphia. Кто-нибудь делал что-то подобное?