Nei*_*n3r 7 java elasticsearch
我使用 elasticsearch 作为数据库来存储大量日志数据。我知道有两种方法可以进行分页:
使用大小和来自 API
使用滚动 API
现在我使用'from'进行分页。从前端获取页面和大小参数,在后端(Java)
searchSourceBuilder.size(size);
searchSourceBuilder.from(page * size);
Run Code Online (Sandbox Code Playgroud)
但是,如果page*size> 10000,则从 ES 抛出异常。
我可以使用滚动 API 进行分页吗?
我知道如果我使用滚动 API,该searchResponse对象将返回 a _scroll_id,它看起来像一个base64字符串。
如何控制页面和大小?
好像Scroll API只支持连续页码?
Elasticsearch 中没有任何内容允许直接跳转到特定页面,因为必须从不同的分片中收集结果。所以在你的情况下search_after将是一个更好的选择。您可以减少为后续查询返回的数据量,然后一旦到达实际请求的页面,就可以获得完整的数据。
示例:假设您必须跳转到第 99 页,那么您可以减少所有第 98 页请求的数据量,一旦您到达 99,您就可以获得完整的数据。
你说的是对的!
您无法使用滚动 API 进行传统分页。
我可能建议您查看Search After API
这可能无法帮助您满足您的要求!
默认最大结果大小From / Size为 10,000。
正如这里提到的
注意
from + size不能超过index.max_result_window索引设置,默认为10,000
因此,如果您以某种方式增加index.max_result_window持久设置,那么它将增加搜索结果的最大数量!但这可能不是解决方案,但可以减少限制。
请记住,上述解决方案可能会影响 ES 服务器的性能。阅读此处的所有帖子。
我的建议是使用 Scroll API 并更改分页样式
| 归档时间: |
|
| 查看次数: |
9142 次 |
| 最近记录: |