【问题标题】:efficient search in mongodb v2.4mongodb v2.4中的高效搜索
【发布时间】:2014-08-25 05:22:19
【问题描述】:

我正在使用 2.4 版的 mongodb,它可以很好地满足我的需求,除了一件事,即 searching,因为它不支持诸如 $search 之类的一些高级选项>。那么,有没有办法在 v2.4 中实现这种搜索。我坚持使用旧版本的原因是因为我不想通过升级丢失任何数据,也不想停止实时 mongo 服务器。
我想要的结果应该和这个查询的结果类似:

db.data.find({$text: { $search: 'query' } }, { score: {$meta: "textScore" }})

此查询适用于最新版本的 mongoDB。另外,如果大家建议我使用最新版本,请提供一些参考资料,帮助我安全升级 mongodb。

【问题讨论】:

    标签: javascript node.js mongodb search


    【解决方案1】:

    这有点像第 22 条问题,主要是由于文本搜索功能在早期版本中被认为是“实验性的”而引入的。除了处于早期开发阶段之外,由于“整个”查询和索引 API 已经为 MongoDB 2.6 重新编写,主要是为了支持新类型的索引可用并使用于处理数据一致的 API。

    所以以前的版本直接且仅通过“命令”接口实现文本搜索。事情的工作方式略有不同,当前的“弃用”通知意味着以这种方式工作将被删除。但"text" 命令目前仍将如早期文档中所示运行:

    db.data.runCommand("text", { "search": "query" })
    

    因此,现有文档中涵盖了此处的限制。值得注意的是,返回的文档数量是那些包含该命令的“限制”参数的文档,并且没有“跳过”的概念。此外,这是一个“文档”响应而不是游标,因此总结果不能超过 BSON 限制 16MB。

    也就是说,有点离题,但请考虑您的 MongDB 2.6 部署场景,主要是以下内容。

    1. 面向未来。在早期的形式中,这是一个实验特性。因此,当您继续使用该版本时,通常不会以任何方式通过修复“向后移植”任何一般性缺陷和问题。有些人可能会,但没有充分的理由这样做,随着时间的推移,这种情况大多会减弱。请记住,这是“实验性的”,因此对生产中的使用给出了适当的警告。

    2. 一致性/弃用。 “文本”和“地理空间”的 API 已更改。因此,早期版本中的实现是不同的并且“已弃用”,并且会消失。正确的方法是与其他查询具有相同的结构,并在所有查询形式中始终如一地使用它,而不是直接命令。

    3. 部署。你说你不想停止服务器,但你真的不应该有一台服务器。除了超出您为什么需要 MongoDB 的一般理念之外,至少“副本集”对于数据冗余和应用程序的“正常运行时间”是一个好主意。消除单点故障意味着您可以单独“关闭”离散节点并“升级”而不影响应用程序停机时间。

    所以这“有点”偏离了编程主题,但对我来说,最后一点是最重要的。最好通过将其构建到您的部署架构中来确保您的应用程序没有故障点。这使得“保持领先”成为一个更简单的决定。在投入生产之前,始终值得注意的是技术的“实验性”条款。覆盖你的基地。

    【讨论】:

    • 谢谢@Neil。你是救世主。
    • @Ravi 实际上,我对此还有很多话要说,而不仅仅是指出“命令”形式。在决定以这种方式编码之前,值得考虑完整的细节。
    • 这是一个很好的考虑因素,我会在未来的发展中考虑这个:)
    • 我还有一个查询,我可以匹配同一个查询中的任何辅助字段吗??
    • @Ravi 正如我所说,它是不同的。这由命令中的“过滤器”条件覆盖。有关所有详细信息,请参阅链接的手册页。
    猜你喜欢
    • 2020-01-22
    • 2013-10-06
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多