mongodb - mongodb 无法依靠搜索结果
问题描述
我收集了大约 2 亿份文档。我有一个文本索引和基本搜索,例如:
db.MyCol.find({$text: { $search : "word" }})
工作正常并在几秒钟内完成。
但是,某些操作需要不确定的时间。例如,如果我想对结果进行分页,那么我会尝试获得如下总计数:
db.MyCol.find({$text: { $search : "word" }}).count()
然后这永远不会完成。我等了一个小时然后放弃了。我需要在请求范围内的这些数据。理想情况下几秒钟,最坏几分钟。
我试图解释查询以查看发生了什么,但我得到了完全相同的处理,当我尝试时它只是坐在那里旋转:
db.MyCol.find({$text: { $search : "word" }}).explain()
或者
db.MyCol.find({$text: { $search : "word" }}).count().explain()
我也尝试过以下问题以通过聚合获得它:
db.MyCol.aggregate(
[
{ $match: { $text: { $search: "word" } } },
{ $group: { _id: null, count: { $sum:1 } } }
], { "allowDiskUse" : true }
)
但同样,它似乎需要永远完成。
如何对大型集合的文本搜索进行分页?
解决方案
看看 $facet 是否可以表现得更好
db.MyCol.aggregate(
[
{
"$match": { "$text": { "$search": "word" } }
},
{
"$facet": {
"count": [
{
"$count": "count"
}
],
"items": [
{
"$skip": 0
},
{
"$limit": 100
}
]
}
}
]
)
推荐阅读
- html - 如何在 100vh 页面上禁用移动设备上的垂直滚动?
- excel - 使用 VBA 将多个单元格粘贴到一个单元格中
- amazon-web-services - AWS S3 放置事件 Lambda 创建具有正确所有者 Cognito 的 DynamoDB 条目
- php - PHP 未捕获的 com_exception:参数 0:类型不匹配
- sql - 满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?
- php - 不能包含父目录中的 php 文件
- html - Podium CSS:将元素定位在其 div 的底部
- java - 如何计算这个类的hashCode
- python - 坐标图的刻度轴刻度标签
- sql - 为环境创建角色