我正在使用mongodb的2.4版,它可以满足我的需求,除了一件事,即搜索,因为它不支持某些高级选项,例如 $ search 。那么,有没有办法在v2.4中实现这种搜索。我坚持使用旧版本的原因是因为我不希望通过升级丢失任何数据,而且我也不想停止实时mongo服务器。
我想要的结果应该与此查询的结果类似:
db.data.find({$text: { $search: 'query' } }, { score: {$meta: "textScore" }})
此查询适用于最新版本的mongoDB。如果您的人建议我使用最新版本,请提供一些可以帮助我安全升级mongodb的参考资料。
答案 0 :(得分:0)
这是一个有点紧张的问题22,主要是通过正在考虑的文本搜索功能和#34;实验"在早期版本中。除了处于早期开发阶段之外,由于"整个"已经为MongoDB 2.6重写了查询和索引API,主要是为了支持可用的新类型索引,并使用于处理数据的API保持一致。
所以以前的版本通过"命令实现文本搜索"直接和仅接口。事情的工作方式略有不同,目前的“弃用”和#34;通知意味着将以这种方式工作。但"text"命令目前仍将按照前面的文档中所示运行:
db.data.runCommand("text", { "search": "query" })
因此,现有文档中有限制。值得注意的是,返回的文件数量包含"限制"该命令的参数并没有" skip"的概念。此外,这是一个"文件"响应而不是光标,因此总结果不能超过16MB的BSON限制。
尽管如此,有点偏离主题,但请考虑您的MongDB 2.6部署方案,主要是以下内容。
未来校对。在早期的形式中,这是一个实验性的特征。因此,任何一般的缺陷和问题通常都不会被“后退”#34;以任何方式修复,当你挂在版本上。有些人可能,但没有充分的理由这样做,这种情况随着时间的流逝而逐渐减弱。记住这是"实验"所以对生产中的使用给出了适当的警告。
<强>一致性/弃用即可。 &#34; text&#34;的API和#34;地理空间&#34;已经改变。因此,早期版本中的实现是不同的,并且已经弃用了#34;并且将会消失。正确的方法是与其他查询具有相同的结构,并始终在所有查询表单中使用它而不是直接命令。
<强>部署即可。你说你不想停止服务器,但你真的不应该有一台服务器。除了一般的哲学之外,为什么你需要MongoDB,至少是一个&#34;副本集&#34;对于数据冗余和“正常运行时间”来说是一个好主意。你的申请。消除单点故障意味着您可以单独“降低”故障。离散节点和&#34;升级&#34;不影响应用程序停机时间。
这样就可以了解一下&#34;关闭编程主题,但对我来说,最后一点是最重要的。通过将此应用程序构建到部署体系结构中,可以更好地确保应用程序没有故障点。这使得&#34;保持领先于曲线&#34;一个更简单的决定。总是值得注意的是&#34;实验&#34;在推出到生产之前的技术条款。覆盖你的基地。