gpt4 book ai didi

c# - MongoDB 文本搜索,在 C# 中进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 17:50:12 25 4
gpt4 key购买 nike

我正在尝试用 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;

但是我得到以下错误:

{"QueryFailure flag was true (response was { \"$err\" : \"Can't canonicalize query: BadValue must have $meta projection for all $meta sort keys\", \"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;

至少运行没有错误,但我正在尝试使代码处于顶部的样式,就像您可以为 API 的其余部分做的那样,而不必返回到控制台样式的文本字符串,而这些文本字符串必须为每次执行解析。此外,我需要为搜索添加更多条件,因此这种语法对我来说不实用。

我是否遗漏了任何适当的文档?如果没有,有谁知道如何在顶部的样式中实现它?

最佳答案

使用这篇文章:Retrieve Relevance Ordered Result from Text Query on MongoDB Collection using the C# Driver

我让它与以下代码一起工作:

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;

我的类 MongoPost 有以下字段:

[BsonIgnoreIfNull]
public double? TextMatchScore { get; set; }

关于c# - MongoDB 文本搜索,在 C# 中进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com