使用 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 集合上的文本查询中检索相关性有序结果 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • Mongoose 独特的验证不起作用。保存重复条目

    我正在开发一个 NodeJS 应用程序 其中express是框架 MongoDB是数据库 我正在使用猫鼬插件 我有一个父母模型 我已经添加了独特 真实到场 mobile 但是每当我添加相同的手机号码时 唯一性验证就会失败 除了保存重复的文档
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 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