使用ES(Elasticsearch)一次进入随机页面

时间:2018-07-09 12:07:28

标签: php elasticsearch yii

在界面中,我们具有由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_afterscan-scroll之类的替代方案,但它们似乎不适合我。如果用户单击随机页面,或编辑url [页面编号]或一次转到最后一页? 解决此问题的正确方法是什么? 有什么建议吗?

==编辑== 附:ES v.6.2

==编辑==

如果出现消息“

,则重复
  

... from +大小必须小于或等于...

但是我想找到答案(

  

我了解上述错误,并正在寻找类似的替代方法   search_after和scan-scroll,但它们似乎不适合我

到“

  

如何解决问题,当用户选择一次转到最后一页或   在第千页的中间

Adam T关于“ google”的答案似乎是正确的。

1 个答案:

答案 0 :(得分:0)

如果有足够的内存,一个简单的选择就是将索引设置index.max_result_window从10000增加到所需的数字(在这种情况下,大约为27000)。

请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings

但是,这不会无限扩展-如果将其设置得太大,则会耗尽内存。可能有必要寻找跳到最后一页的替代方法。例如,将示例中的排序顺序更改为“ ASC”将有效地为您提供最后一页,而不必先翻阅其他所有页面。