我正在为一项服务托管一个 mongodb 数据库,该服务支持对包含 680 万条记录的集合进行全文搜索。
其文本索引包括十个不同权重的字段。
大多数搜索只需要不到一秒钟的时间。有些搜索需要两到三秒。然而,有些搜索需要 15 - 60 秒! 15-60秒的搜索案例对于我的应用来说是不可接受的。我需要找到一种方法来加快速度。
当搜索查询中使用索引中非常常见的单词时,搜索需要 15-60 秒。
我似乎文本搜索功能不支持惰性参数。我的第一个想法是在我的文本索引中缓存 50 个最常见单词的列表,然后要求 mongodb 评估最后的(懒惰的)以及不太常见的参数返回的过滤结果。希望人们仍然和我在一起。例如,假设我有一个查询“产品巧克力”,其中产品很常见,而巧克力不常见。我希望能够要求 mongodb 首先评估“巧克力”,然后使用“产品”术语过滤这些结果。有谁知道如何实现这一目标?
我可以通过从数据库查询中省略最常见的单词(即“产品”),然后在收到数据库找到的记录后在应用程序端重新应用常见术语过滤器来实现上述场景。最好所有查询逻辑都发生在数据库上,但我对应用程序端处理持开放态度,以加快支付速度。
这个设计仍然存在一些漏洞。如果用户只搜索常用术语,我别无选择,只能用所有术语访问数据库。从初步阅读来看,我认为不建议(或不支持)在同一集合上有多个文本索引(具有不同的名称)。我的计划是创建两个相同的表,每个表都有我的 680 万条记录,并具有不同的索引 - 一个用于常见单词,一个用于不常见单词。这感觉很笨拙,但我愿意这样做以提高速度。
有谁对如何加速这个系统有任何见解和/或建议。我希望在数据库上进行尽可能多的处理以保持快速。我确信我的 6.8M 记录表不是 mongodb 见过的最大的。谢谢!
我通过允许 MongoDB 全文搜索以基于 OR 的格式进行搜索来解决这些性能问题。我通过微调索引字段的权重并按排名排序来确定结果的优先级。我确实得到了比预期更多的结果,但这并不是一个大问题,因为出现在顶部的加权结果很可能会在我的用户获得底部不太相关的结果之前被消耗掉。
如果有人在仅使用 AND 搜索时遇到 MongoDB 文本搜索性能问题,只需切换回 OR 并使用权重控制结果即可。它的跳跃性能更好。
hth
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)