在界面中,我们具有由Yii1 CGridView小部件显示的行[日志]的列表。 DataProvider是ES(ElasticSearch)。如果用户只是进入索引页面,则他/她发送请求以按日期和ID降序对前30个结果[大小= 30,从= 0]进行获取
'sort' => [
'date' => [
'order' => 'DESC'
],
'id' => [
'order' => 'DESC'
],
],
'from' => $pageFromPrevious * $this->getSize(),
'size' => $this->getSize()
它正在工作。 现在,如果我单击最后一页按钮[CGridView小部件允许/显示该按钮],ES会给我错误
Result window is too large, from + size must be less than or equal to: [10000] but was [26160]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting
我了解上面的错误,并寻找了search_after
和scan-scroll
之类的替代方案,但它们似乎不适合我。如果用户单击随机页面,或编辑url [页面编号]或一次转到最后一页?
解决此问题的正确方法是什么?
有什么建议吗?
==编辑== 附:ES v.6.2
==编辑==
如果出现消息“
,则重复... from +大小必须小于或等于...
”
但是我想找到答案(
我了解上述错误,并正在寻找类似的替代方法 search_after和scan-scroll,但它们似乎不适合我
)
到“
如何解决问题,当用户选择一次转到最后一页或 在第千页的中间
”
Adam T关于“ google”的答案似乎是正确的。
答案 0 :(得分:0)
如果有足够的内存,一个简单的选择就是将索引设置index.max_result_window
从10000增加到所需的数字(在这种情况下,大约为27000)。
但是,这不会无限扩展-如果将其设置得太大,则会耗尽内存。可能有必要寻找跳到最后一页的替代方法。例如,将示例中的排序顺序更改为“ ASC”将有效地为您提供最后一页,而不必先翻阅其他所有页面。