你已经尝试了,你真的很亲密.
请注意,在,
db.collection.find( {$text : {$search : "\"expression\" keyword"}}, {score : {$meta : "textScore"}} ).sort({score : {$meta : "textScore"}})
{$text : {$search : "\"expression\" keyword"}}
- 是query
部分.
{score : {$meta : "textScore"}}
- 是projection
部分.
在您尝试使用Java
驱动程序实现的内容中,
DBObject searchCommand = new BasicDBObject( "$text", new BasicDBObject("$search", "\"expression\" keyword") ).append( "score", new BasicDBObject("'$meta'", "textScore") );
最终会产生,
{$text:{$search:"\"expression\" keyword"},"score":{"meta":"textscore"}}
这不等同于本机查询.即使是预期的 projection
陈述也是其query
本身的一部分.
需要注意的是,这最终找了一个名为场score
,因为它现在已经成为一个部分query
和没有的projection
.
您可以轻松修改您的DBObject
实例,使其成为projection
参数的一部分,它可以工作:
DBObject findCommand = new BasicDBObject( "$text", new BasicDBObject("$search", "keyword") ); DBObject projectCommand = new BasicDBObject( "score", new BasicDBObject("$meta", "textScore")); DBObject sortCommand = new BasicDBObject( "score", new BasicDBObject("$meta", "textScore") ); DBCursor result = collection.find( findCommand ,projectCommand) .sort(sortCommand );