使用 C# 驱动程序从 MongoDB 集合上的文本查询中检索相关性有序结果

2024-04-25

我正在尝试对集合进行文本查询并按文本匹配顺序检索结果。The docs http://docs.mongodb.org/manual/reference/operator/query/text/#text-search-with-additional-query-and-sort-expressions很好地解释了如何在 shell 中执行此操作:

db.articles.find(
   { status: "A", $text: { $search: "coffee cake" } },
   { score: { $meta: "textScore" } }
).sort( { date: 1, score: { $meta: "textScore" } } )

但它需要额外的投影score字段从查找到排序。

在 C# 中,我有一个如下所示的函数:

public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) {
    var cursor = coll.Find(Query.Text(text))
        .SetSortOrder(SortBy<T>.MetaTextScore(???));
    foreach(var t in cursor) {
        // strip projected score from value
        yield return t;
    }
}

但我缺少如何将“textScore”值投影到我的结果中,以便我可以指定列 http://api.mongodb.org/csharp/current/?topic=html/4e4f953d-8756-5f12-e83a-fe7022adb420.htm to MetaTextScore in SetSortOrder.


我通过反复试验才得以实现这一目标。诀窍是您的数据对象需要有一个字段来保存MetaTextScore价值。所以给定接口:

interface ITextSearchSortable {
    double? TextMatchScore { get; set; }
}

最终函数如下所示:

public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) where T:ITextSearchSortable {
    var cursor = coll.Find(Query.Text(text))
        .SetFields(Fields<T>.MetaTextScore(t => t.TextMatchScore))
        .SetSortOrder(SortBy<T>MetaTextScore(t => t.TextMatchScore));
    foreach(var t in cursor) {
        // prevent saving the value back into the database
        t.TextMatchScore = null;
        yield return t;
    }
}

值得注意的是TextMatchScore不能有一个[BsonIgnore]装饰,否则会有异常。然而,它可以有一个[BsonIgnoreIfNull]装饰。因此,通过在生成数据对象之前清理数据对象的值,可以将数据对象保存回集合中,而无需放入垃圾值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 驱动程序从 MongoDB 集合上的文本查询中检索相关性有序结果 的相关文章

  • 是否可以静默运行 .NET Core 控制台应用程序(隐藏控制台窗口)?

    我正在尝试为自己自动化一些任务 并且编写了一些 NET Core 1 0 控制台应用程序 其中之一是 BrowserRouter 一个简单的应用程序 它基于 URL 模式 决定当我单击 HTTP S 链接时要打开哪个浏览器 浏览器配置文件
  • 访问 Linux 线程(pthreads)的本地堆栈

    我目前正在实现一个使用多线程但对总内存消耗有要求的应用程序 我希望有一个主线程执行 I O 并有几个工作线程执行计算 目前 我在主堆栈上有几个可供工作人员访问的数据结构 我使用 OpenMP 进行工作分配 由于主 工作者模式不能很好地与 O
  • ML.NET 无法在 uwp 上运行

    我在 Visual Studio 2017 中构建了一个 UWP 应用程序 并在解决方案中添加了一个类库来运行 ML NET 但每次运行该应用程序时都会出现异常 PlatformNotSupportedException 此平台不支持检索有
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • C++ 致命错误 LNK1120:1 个未解析的外部

    是什么导致了这个错误 我用谷歌搜索了它 我发现的前几个解决方案是库和主函数出了问题 但在我的问题中似乎都很好 我什至重新输入了两者 可能是什么原因造成的 这可能会有所帮助 MSVCRTD lib crtexew obj 错误 LNK2019
  • TransactionScope 超时过早发生?

    我在用着TransactionScope进行一些批量插入和更新 问题是 即使我设置了超时 我也会在 30 分钟长的操作中遇到超时异常TransactionScope到一小时 此外 在异常之后 它会插入看似随机数量的批次记录 例如 最后一个操
  • libxml2 用缩进解析文档

    我正在尝试调试正在解析包含缩进的 xml 文档的代码 我正在尝试找出在 xmlReadMemory 函数上使用的正确参数 XML PARSE NOBLANKS 选项对以下方法调用有何作用 xmlReadMemory buffer data
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 移动构造函数和 std::move 混淆

    我正在阅读有关std move http en cppreference com w cpp utility move 移动构造函数和移动赋值运算符 说实话 我现在得到的只是困惑 现在我有一堂课 class A public int key
  • 如何知道正在服务器上的共享文件夹中进行更改的计算机的主机名/IP 地址

    我必须监视服务器上的共享文件夹 以了解网络中连接的计算机 它的主机名 在该文件夹中发生的更改 我使用C 实现了对目录和文件的监控 但是 它仅监视 创建 重命名 更改 删除 和 错误 事件等事件 我还需要帮助监控访问或更改共享文件夹的计算机的
  • Lego Mindstorm NXT 的 C# 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 Lego Mindstorm NXT 的最新 C NET 库 NXT NET 乐高头脑风暴 最后更新时间 2008 年 4
  • 错误:在 C++ 中从“const char [5]”转换为非标量类型

    public string str Test string str this gt str str cout lt lt constructor lt
  • C# 在 Process.Kill() 期间仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分

    我一直在广泛研究这个问题 但似乎找不到答案 我知道Only part of a ReadProcessMemory or WriteProcessMemory request was completed当 32 位进程尝试访问 64 位进程
  • 使用 textbox_keypress 过滤绑定源或绑定列表

    我使用 winforms 和 c 如何过滤绑定源或绑定列表 带有文本框文本 我的意思是 当我在文本框中输入时 我的网格正在使用 Like 方法而不是 equal 方法进行过滤 thanks 我使用委托来解决这个问题 一些代码如下所示 Lis
  • 在 C 中使用 fgets 和 strcmp [重复]

    这个问题在这里已经有答案了 我试图从用户那里获取字符串输入 然后根据他们输入的输入运行不同的函数 例如 假设我问 你最喜欢的水果是什么 我希望程序根据他们输入的内容进行评论 我不知道该怎么做 这是我到目前为止所拥有的 include
  • 将 XML 反序列化为对象数组

    我正在尝试将 XML 文件反序列化为对象数组 但收到空对象 我的问题看起来与此类似 如何将 xml 反序列化为对象数组 https stackoverflow com questions 7541899 how to deserialize
  • typeof() 表达式内的副作用

    在 GNUC C 中 您可以使用typeof expression 并且使用内部带有副作用的表达式是合法的 例如 您可以使用以下 C 代码 int x 0 typeof x y 在这种情况下 副作用被忽略 并且 x 之后仍然为零 这是有道理
  • Telegram编译过程:没有规则来制作目标'/usr/lib/libicutu.a'

    我正在关注 Telegram 的编译过程here https github com telegramdesktop tdesktop blob master doc building cmake md在最后一步编译应用程序本身时 它给了我这
  • C 中的堆错误

    我知道这确实很一般 但当我在 Visual C 2008 Express 中运行 c 文件时 我得到 this 见下文 当我打电话时会发生这种情况malloc 以我的工作为例 我动态地正确分配内存 HEAP Code exe HEAP 释放
  • 文件嵌套时嵌入资源名称丢失扩展名

    我有一些脚本存储在我标记为嵌入式资源的文件中 我将每个文件嵌套在其关联的下面 cs文件 不幸的是 由于某种原因 当您以这种方式嵌套文件时 嵌入的资源名称会丢失文件扩展名 这意味着在运行时我无法识别哪些嵌入式资源是脚本 哪些不是脚本 对此我能

随机推荐

  • Cypher - 匹配两个不同的可能路径并返回两者

    我有一个数据集 我在这里作为示例表示 http console neo4j org id 3dq78v http console neo4j org id 3dq78v 我想要做的是对于图表中的每个 Z 节点 该示例只有一个 但我有很多 我
  • 苹果组合框架:如何并行执行多个发布者并等待所有发布者完成?

    我正在发现组合 我编写了以 组合 方式发出 HTTP 请求的方法 例如 func testRawDataTaskPublisher for url URL gt AnyPublisher
  • 使用不同的配置文件设置 Git 的开发和测试分支

    我们有一个 WordPress 安装 它有不同的实时 测试 开发配置文件 我知道如何让 Git 忽略wp config php文件 但我想在每个分支中有一个不同的 WP config 文件 这样当开发人员切换到 Dev 时 它将使用 Dev
  • 龙卷风 websocket 应用程序中的用户身份验证

    现在 我提高了我的龙卷风技能 并有一个关于用户身份验证的问题 我的解决方案是在首页上创建安全令牌 然后将其与其他数据一起发送 从 javascript 到龙卷风服务器 在其中检查和验证用户 我想到了 cookie 但我不知道如何读取 coo
  • Sql Server 数据库项目 - VS 2013 中缺少模板

    在 VS2012 中 我使用 Sql Server 数据库项目来管理我的数据库 我尝试将 Db 项目添加到新的 VS2013 解决方案中 但我似乎找不到模板 我在网上和已安装的模板中查看过 有任何想法吗 对我来说 它列在 其他语言 下 我有
  • 将等号('=')传递给 MediaWiki 模板中的参数

    如何在模板参数中使用 字符而不破坏模板解析器 我不是 MediaWIKI 开发人员 所以我没有调试代码或检查日志 我希望这里有人提供转义传递给模板的字符的提示 使用以下内容创建一个名为 Test 的模板 1 像这样 Test R 3 2 1
  • 使用curl解压gzip数据

    I added curl easy setopt client CURLOPT ENCODING gzip 到我的代码 我预计curl 会导致服务器发送压缩数据并解压缩它 实际上我在 HTTP 标头中看到数据被压缩 变化 Accept En
  • Codility 的复杂性达到顶峰

    我刚刚完成了以下 CodilityPeaks http codility com demo take sample test peaks问题 问题如下 给出一个由 N 个整数组成的非空零索引数组 A 峰值是大于其邻居的数组元素 更准确地说
  • 如何使用 JAX-WS 将 SOAP 标头添加到 SOAP 请求?

    我们需要使用其他团队开发的网络服务 使用JAX WS用于生成网络服务 我们正在使用wsimport生成客户端存根 问题是我需要将以下信息作为标头与 SOAP 主体一起传递
  • 如何更改 Github/Markdown 中图像的大小?

    我正在 Github 存储库中编辑 Readme md 文件 并插入了一张图片 请参阅https github com khpeek FMCW 雷达 https github com khpeek FMCW radar 图片占据了整个宽度
  • 有点好奇了解 .NET 中的表达式树

    我读过几篇文章和几篇stackoverflow com关于表达式树的帖子 我的大脑很难理解 问题 1 像DOM 文档对象模型 一样 它是逻辑的内存表示 2 有人解释说它是一种将可执行 代码转换为数据的机制 使用它我们可以生成表示代码的数据结
  • Theano 中的名称冲突

    我正在尝试在模块中导入 theano 但我得到了回溯 File media tarun 6A86CA8286CA4DEF develop pydy pydy codegen code py line 16 in
  • SearchManager - 添加自定义建议

    我已经阅读了有关构建搜索界面和添加自定义建议的所有在线文档 但我仍然不清楚这是如何工作的 文档说我必须 为您的建议构建一个表 例如在 SQLiteDatabase 中 并使用所需的列格式化表 我假设系统最终会自己用适当的建议填充此表 但是哪
  • gitk:悬停时显示分支名称

    你能告诉我如何让 gitk 工具在悬停时显示分支名称或建议能够这样做的工具吗 gitk 显示分支缠结 其中分支是无名的 我必须猜测哪个是 master 哪个是 stable 等 在 gitk 窗口的左下半部分 有一个信息行指定Branche
  • Docker 上的 MySQL?

    我是 Docker 新手 仍在探索中 我遇到了这个问题 可能看起来很愚蠢 但我真的被困住了 所以我有一个使用 MySQL 服务器的 Spring boot 应用程序 我想在容器上运行我的应用程序 我设法 运行一个没有 MySQL 的应用程序
  • 在 model.fit() 期间记录 Keras 中每个时期的计算时间

    我想比较不同模型之间的计算时间 在拟合期间 每个时期的计算时间被打印到控制台 Epoch 5 5 160000 160000 10s 我正在寻找一种方法来存储这些时间 其方式与模型指标类似 模型指标保存在每个时期并可通过历史对象获取 尝试以
  • 通过 DynamicMethod 调用 varargs 方法

    我正在尝试使用 DynamicMethod 调用非托管的类似 printf 的函数 在运行时我得到一个 BadImageFormatException 找不到索引 HRESULT 的异常 0x80131124 这是运行时的限制还是我发出的代
  • 如何使用 se.py 在 gem5 系统调用模拟模式下编译和运行可执行文件?

    有许多可能的错误和解决方法分散在不同的地方 任何人都可以提供至少一种详细的工作设置 以及确切的 gem5 和编译器版本 希望在 Ubuntu 上吗 最小的 Ubuntu 设置 首先要注意一件事 动态链接的可执行文件首先运行动态加载器 这意味
  • 如何仅为具有特定模板 ID 的列表添加事件接收器

    我正在为自定义列表模板添加 ItemAdding 事件接收器 事件接收器和列表模板都是由相同的功能部署的 同样的功能还可以创建列表实例 我遇到的问题是该事件是为每个列表项触发在其部署的地点 eventreceivre 的 Elements
  • 使用 C# 驱动程序从 MongoDB 集合上的文本查询中检索相关性有序结果

    我正在尝试对集合进行文本查询并按文本匹配顺序检索结果 The docs http docs mongodb org manual reference operator query text text search with addition