MongoDB 文本索引搜索大表中常见单词的速度很慢

2023-12-24

我正在为一项服务托管一个 mongodb 数据库,该服务支持对包含 680 万条记录的集合进行全文搜索。

其文本索引包括十个不同权重的字段。

大多数搜索只需要不到一秒钟的时间。有些搜索需要两到三秒。然而,有些搜索需要 15 - 60 秒! 15-60秒的搜索案例对于我的应用来说是不可接受的。我需要找到一种方法来加快速度。

当搜索查询中使用索引中非常常见的单词时,搜索需要 15-60 秒。

我似乎文本搜索功能不支持惰性参数。我的第一个想法是在我的文本索引中缓存 50 个最常见单词的列表,然后要求 mongodb 评估最后的(懒惰的)以及不太常见的参数返回的过滤结果。希望人们仍然和我在一起。例如,假设我有一个查询“产品巧克力”,其中产品很常见,而巧克力不常见。我希望能够要求 mongodb 首先评估“巧克力”,然后使用“产品”术语过滤这些结果。有谁知道如何实现这一目标?

我可以通过从数据库查询中省略最常见的单词(即“产品”),然后在收到数据库找到的记录后在应用程序端重新应用常见术语过滤器来实现上述场景。最好所有查询逻辑都发生在数据库上,但我对应用程序端处理持开放态度,以加快支付速度。

这个设计仍然存在一些漏洞。如果用户只搜索常用术语,我别无选择,只能用所有术语访问数据库。从初步阅读来看,我认为不建议(或不支持)在同一集合上有多个文本索引(具有不同的名称)。我的计划是创建两个相同的表,每个表都有我的 680 万条记录,并具有不同的索引 - 一个用于常见单词,一个用于不常见单词。这感觉很笨拙,但我愿意这样做以提高速度。

有谁对如何加速这个系统有任何见解和/或建议。我希望在数据库上进行尽可能多的处理以保持快速。我确信我的 6.8M 记录表不是 mongodb 见过的最大的。谢谢!


我通过允许 MongoDB 全文搜索以基于 OR 的格式进行搜索来解决这些性能问题。我通过微调索引字段的权重并按排名排序来确定结果的优先级。我确实得到了比预期更多的结果,但这并不是一个大问题,因为出现在顶部的加权结果很可能会在我的用户获得底部不太相关的结果之前被消耗掉。

如果有人在仅使用 AND 搜索时遇到 MongoDB 文本搜索性能问题,只需切换回 OR 并使用权重控制结果即可。它的跳跃性能更好。

hth

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

MongoDB 文本索引搜索大表中常见单词的速度很慢 的相关文章

  • 空 while 循环有什么影响?

    我知道这可能是一个有点 愚蠢 的问题 但有时 我只想循环直到条件为假 但我不喜欢让循环保持为空 所以代替 Visible true while IsRunning Visible false 我通常prefer while IsRunnin
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • iOS 自定义单元格设计放在哪里? awakeFromNib 还是 cellForRowAtIndexPath?

    所以 基本上我用笔尖做了一个定制单元 希望我应用一些定制设计 比如颜色和阴影 我发现了两种应用样式的方法 awakeFromNib override func awakeFromNib super awakeFromNib Containe
  • MongoDB自增ID

    MongodB 中自动生成的 ID 的大小为12 Bytes大整数的大小是8 bytes 我在 4 台运行 Ubuntu Server 的机器上有一个 mongodb 集群 但我现在只是在测试 插入只能通过一台服务器 即 Nodejs 服务
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • .NET 中 UniqueQueue 和 UniqueReplacementQueue 集合最有效的实现

    考虑到入队和出队操作的速度同样重要 NET 中 UniqueQueue 和 UniqueReplacementQueue 集合最有效 就速度而言 的实现是什么 UniqueQueue是一个不可能出现重复的队列 因此 如果我将一个元素推送到队
  • 在Python列表中交换元素的最快方法

    在Python中交换两个列表元素是否有比 L a L b L b L a 或者我必须求助于Cython http cython org or Weave http www scipy org Weave或类似的 看起来 Python 编译器
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 如何处理 MongoDB 的断开连接错误

    我在 Node js 进程中看到了这个未捕获的异常 Uncaught exception Error read ETIMEDOUT at TCP onStreamRead internal stream base commons js 16
  • SQLite .NET 性能,如何加快速度?

    在我的系统上 约 86000 个 SQLite 插入需要长达 20 分钟 意味着每秒约 70 个插入 我要做数百万 我怎样才能加快速度 对每一行的 SQLiteConnection 对象调用 Open 和 Close 会降低性能吗 交易有帮
  • spring-data-mongodb 在重新水化对象时到底如何处理构造函数?

    我读过了http static springsource org spring data data mongo docs 1 1 0 RELEASE reference html mapping chapter http static sp
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • 如何在java中使用$lookup阶段与spring data mongodb? [复制]

    这个问题在这里已经有答案了 到 Spring 的最新版本 我已经看到很多堆栈溢出问题 这表明 spring data mongodb 中不支持此操作新的 spring data mongodb 1 10 0 中是否支持此操作 db orde
  • Mxnet - 缓慢的数组复制到 GPU

    我的问题 我应该如何在 mxnet 中执行快速矩阵乘法 我的具体问题 数组复制到 GPU 的速度很慢 对此我们能做些什么呢 我创建随机数组 将它们复制到上下文中 然后相乘 import mxnet as mx import mxnet nd
  • JSON.stringify 对于大型对象来说非常慢

    我在 javascript 中有一个非常大的对象 大约 10MB 当我对其进行字符串化时 需要很长时间 因此我将其发送到后端并将其解析为一个对象 实际上是带有数组的嵌套对象 这也需要很长时间 但这不是我们在这个问题中的问题 问题 我怎样才能
  • 在 MongoDB 查询中,负限制是什么意思?

    我正在使用 Mongoid ruby gem 与 MongoDB 进行交互 当我尝试从查询中获取某些内容时 它会添加 limit 1 即负数 当我希望它只使用1 我尝试在控制台中执行相同的操作 但它没有更改返回的文档 负数限制是否意味着什么
  • MongoDB:如何在嵌套数组中更新插入对象?

    考虑以下文档 countries country France cities city Paris population 100 country England cities city
  • 如何解决“布局有超过 80 个视图,对性能不利”?

    我正在做一个有点复杂的布局 只是我无法修复 LINT 指示的错误 黑莓浏览次数超过 80 对性能不利 这是布局
  • 使用 mongoimport 从 Windows 文件夹批量导入 MongoDB

    我的存档中有很多 json 文件 我需要将它们导入到 mongo 每一个操作中 我认为它可能是循环的 你对此有什么想法吗 如果您使用的是 Linux Unix shell 您可以尝试 for filename in do mongoimpo

随机推荐