使用C#排序的MongoDB文本搜索

Tho*_*mas 1 c# sorting mongodb

我正在尝试在C#中使用MongoDB实现文本搜索.

该文档未涵盖有关如何在C#中对文本搜索结果进行排序的任何内容.

我有一个标签列表,用空格分隔,以匹配.
如果我提供像"Tag1 Tag2"这样的字符串,我希望按以下顺序提供结果:

  1. 任何有'Tag1'和'Tag2'的东西,接着是
  2. 任何只有'Tag1'的东西,接着是
  3. 任何只有'Tag2'的东西

我一直试图拼凑一些代码:

var F = Builders<MongoPost>.Filter.Text(Tags);
var S = Builders<MongoPost>.Sort.MetaTextScore("textScore");
return Mongo.Driver.Find(F).Sort(S).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

{"QueryFailure标志为真(响应为{\"$ err \":\"无法规范化查询:BadValue必须对所有$ meta排序键都有$ meta投影\",\"code \":17287}). "}

没有适当的文档来解决此错误...

然后我在这个网站上找到了以下代码:

var pipeline = new List<BsonDocument>
{
    BsonSerializer.Deserialize<BsonDocument>("{ $match: { $text: { $search: \"" + Tags + "\" } } }"),
    BsonSerializer.Deserialize<BsonDocument>("{ $sort: { score: { $meta: \"textScore\" } } }")
};

var R = Mongo.Driver.AggregateAsync(new BsonDocumentStagePipelineDefinition<MongoPost, MongoPost>(pipeline)).Result;
return R.ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

至少运行没有错误,但我试图将样式放在顶部的样式中,就像你可以为API的其余部分做的那样,而不必回到必须解析的控制台样式文本字符串每次执行.另外,我需要为搜索添加更多标准,因此这种语法对我来说不实用.

我错过了哪些适当的文件?如果没有,有没有人知道如何在顶部的风格实现这一点?

Tho*_*mas 7

使用这篇文章:使用C#驱动程序从MongoDB Collection上的文本查询中检索相关性排序结果

我让它使用以下代码:

var F = Builders<MongoPost>.Filter.Text(Tags);
var P = Builders<MongoPost>.Projection.MetaTextScore("TextMatchScore");
var S = Builders<MongoPost>.Sort.MetaTextScore("TextMatchScore");
return Mongo.Driver.Find(F).Project<MongoPost>(P).Sort(S).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

我的班级MongoPost有以下字段:

[BsonIgnoreIfNull]
public double? TextMatchScore { get; set; }
Run Code Online (Sandbox Code Playgroud)