结果窗口太大,+大小必须小于或等于:[10000]但是[100000]

A.G*_*A.G 14 elasticsearch

我在elasticSearch中遇到以下错误:

[结果窗口太大,+大小必须小于或等于:[10000]但是[100000].

有关请求大型数据集的更有效方法,请参阅scroll api.可以通过更改[index.max_result_window]索引级别参数来设置此限制.]我无法获取我们必须设置的文件

 index.max_result_window = 50000;
Run Code Online (Sandbox Code Playgroud)

Chr*_*one 20

您可以在这里找到一些深度分页的官方文档参考.

如果需要更新elasticsearch实例中的最大结果窗口,可以通过这种方式编辑设置

curl -XPUT "http://localhost:9200/my_index/_settings" -d '{ "index" : { "max_result_window" : 500000 } }' -H "Content-Type: application/json"
Run Code Online (Sandbox Code Playgroud)

正如这里已经讨论过的,但要注意深度分页,因为它可能会增加内存使用量并降低elasticsearch的性能.

为了实现更高效的搜索,您应该看看:

  • 如果我有百万条记录,并希望转到最后一页怎么办?你能给我一些建议吗? (9认同)
  • 当您谈论最后一页时,本质上您必须有某种排序字段。反向排序可能是个好主意 (2认同)

gee*_*mer 8

是的,增加max_result_window可以解决问题,但 Elastic Search 不推荐此解决方案,因为它可能会增加内存和 CPU 使用率并降低 Elastic Search 实例的性能。

为什么普通ES搜索API的限制是10,000

默认情况下,offset + limit 限制为 10,000。当以这种方式分页时,Elasticsearch 必须解析查询,构建搜索上下文,将查询分发到适用的分片,整理结果,跳过过去的 $offset 项目,然后读出 $limit 项目并销毁每个页面的搜索上下文意味着我们分页越深,每个页面都比它之前的页面更昂贵。

两个推荐的解决方案可以是

  1. scroll API:可用于从单个搜索请求中检索大量结果(甚至所有结果)。但如果您没有无限分页,那么这不适合您。建议使用 Scroll API 来实现高效的深度滚动,但滚动上下文的成本很高,不建议将其用于实时用户请求。它从一个请求到下一个请求重用搜索上下文和位置。当你需要深度分页时应该使用它
  2. API 之后的 ES 搜索:如果您使用有限分页显示项目列表,那么这可以帮助您。

But If you want to jump freely to a random page, above both is not for you.

从长远来看,您可以通过更新max_result_window设置中的值来解决问题,但从长远来看,这不应该是一个解决方案。

如果你想自由跳转到随机页面

您可以教育您的用户,他们不需要多次单击分页编号即可转到下一页,他们可以...

  • 只需添加日期范围过滤器来减少项目,然后对有限的页面执行分页。
  • 或者更改排序顺序,使最后一页出现在第一页上


use*_*217 5

您可以通过index.max_result_window = 50000;在etc/elasticsearch中的elasticsearch.yml文件中设置来更改最大结果窗口

  • 这仅在Elasticsearch 5.x之前有效。 (3认同)