在 Morphia 全文搜索中包含分数

Chu*_*k M 5 mongodb morphia

我正在尝试在 Morphia 中使用 MongoDB 全文索引。我需要返回每个文档的分数并对结果进行排序。这是我的查询在没有 Morphia 的情况下的样子:

   db.getCollection('disease').find( { $text: { $search: "brain" } }, 
                                     { score: { $meta: "textScore" } } )
                              .sort( { score: { $meta: "textScore" } } )
Run Code Online (Sandbox Code Playgroud)

这可以正常工作并返回按分数排序的命中。

我也可以在没有 Morphia 的情况下直接使用 MongoDB Java 驱动程序来做到这一点。

    // 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"));
Run Code Online (Sandbox Code Playgroud)

我不知道如何在 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());
Run Code Online (Sandbox Code Playgroud)

该示例不返回分数并按“_id”排序。我没有看到任何方法来处理 Morphia 中的 $meta 运算符。有没有人做过类似的事情?

eva*_*oly 2

由于 Morphia 映射回您的类型,因此在这种情况下公开分数的唯一方法是将分数字段添加到您的实体类型并将其映射回该字段。这并不好,因为它开始用数据库元数据字段污染您的业务类型。您始终可以尝试映射回包含您想要的任何元数据的特殊值对象类型。这至少可以让您的业务对象免受这些元数据的影响。