我试图在我的节点(express.js)应用程序中实现mongo文本搜索。MongoDB全文搜索:溢出排序阶段缓冲数据使用
这里是我的代码:
Collection.find({$text: {$search: searchString}}
, {score: {$meta: "textScore"}})
.sort({score: {$meta: 'textScore'}})
.exec(function(err, docs {
//Process docs
});
我收到的时候对大数据集进行文本搜索以下错误:
MongoError: Executor error: Overflow sort stage buffered data usage of 33554558 bytes exceeds internal limit of 33554432 bytes
我知道MongoDB中可以排序的最大32MB的数据和这个的错误可以通过为字段添加索引来避免,我们将使用排序收集。但在我的情况下,我排序收集textScore
,我不确定是否有可能为此字段设置索引。如果没有,是否有任何解决方法?
注意:我知道这里有类似的问题,但大多数这些问题没有textScore
作为排序标准,因此我的问题是不同的。
谢谢你的回答,我试着通过带有聚合函数的'allowDiskUse'选项,但是如果有很多预期的搜索结果,我会收到跟随错误:“聚合失败:{errmsg”:“异常:聚合结果超过最大文档大小(16MB)“, ”code“:16389, ”ok“:0 }” – Raeesaa
忽略该项。显然,你的结果现在大于16MB。更新我的原始答案来修复它。 –
是的聚合查询结果大于16MB。 – Raeesaa