我有一个简单的单字段索引,其中包含以下映射:
"search": {
"type": "string",
"index": "not_analyzed",
"store": true
}
它存储在5个分片中,并且有超过10M的文档(每个大约25字节),我有一个网页,通过以下查询迭代它们:
GET /searches/_search
{
"query": {
"match_all": {}
},
"from": 1000000,
"size":100
}
以下是一些不合理减速的近似数据(左边是“from”,右边是秒):
0 -> 0.065
1.000 -> 0.065
10.000 -> 0.093
100.000 -> 0.560
1.000.000 -> 5.200
是否有任何可能的解决方案来获得恒定的执行时间?一些神奇的查询或设置或其他东西。我在同一台机器上还有3个索引(都有数百万个文件),我不想维护另一个数据库只是为了通过这些数据正确分页。如果我应该迁移,..哪个数据库对这项工作有好处?
感谢。
修改 当我说“迭代”时,我的意思是“分页”。用户可以请求第10页,然后突然显示第1M页。我不是母语为英语的人,对这些错误感到抱歉。
答案 0 :(得分:1)
以下是Elasticseach页面的文字。
与来自和大小的深度分页 - 例如?大小= 10安培;从= 10000 - 是 非常低效(在这个例子中)100,000个排序结果必须 从每个碎片中检索并使用,以便仅返回10 结果。必须对每个请求的页面重复此过程。
- > Elasticsearch Page
您必须使用滚动来处理大型数据集。这是link.