限制Rails中的Elasticsearch结果计数

时间:2017-11-26 08:29:25

标签: ruby-on-rails elasticsearch pagination will-paginate elasticsearch-rails

我正在使用elasticsearch-rails和will_paginate gems运行Rails和Elasticsearch,并且事情很有效。

我遇到的唯一问题是我的记录数增加了超过10.000,这给出了错误“结果窗口太大,+大小必须小于或等于:[10000]但是[10200]”当有人点击分页链接的最后一页时。

现在我不想搞乱index.max_result_window,因为我的数据集要大得多,而且我真的不需要访问者能够查看每个页面和记录。

所以基本上我只是想在我的结果上设置10.000的限制,但是我没有运气。

这是我在控制器操作中的查询:

@response = Price.search(params)
@response = @response.paginate(page: params[:page], per_page: 24)
@prices = @response.records.includes(shop: :pictures)
@prices_count = @response.total_entries
@prices = @prices.decorate
@results = @response.results

我使用

将@response提供给will_paginate
will_paginate(@response)

我尝试在各个地方使用.limit(10000),并为will_paginate提供total_entries值,但似乎没有任何效果。

你们有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我有同样的问题,在我的情况下,我使用kaminari,但应该与will_paginate一样:

  

= paginate @keyword_search_results

在400页之后每页有25个结果会引发index.max_result_window错误,因此我只需将:total_pages选项添加到paginate

  

= paginate @keyword_search_results,{:total_pages => 400}

根据您的需要动态计算该值是个好主意。

答案 1 :(得分:0)

使用per_page选项
    @response = Price.search(params,per_page:24)