Ограничьте количество результатов Elasticsearch в Rails

Я использую Rails с Elasticsearch, используя elasticsearch-rails и драгоценные камни will_paginate, и все работает отлично.

Единственная проблема, с которой я сталкиваюсь, заключается в том, что количество моих записей превысило 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) в разных местах и ​​задавать значение total_entries для will_paginate, но, похоже, ничего не работает.

У вас есть идеи?

Спасибо!


person Reinier    schedule 26.11.2017    source источник


Ответы (2)


У меня была такая же проблема, в моем случае я использую kaminari, но должен работать так же с will_paginate:

= разбить на страницы @keyword_search_results

С 25 результатами на страницу после 400 страниц выдается ошибка index.max_result_window, поэтому я просто добавляю параметр :total_pages к paginate

= разбить на страницы @keyword_search_results, {:total_pages => 400}

Было бы неплохо рассчитать это значение динамически в зависимости от ваших потребностей.

person Carlos Castillo    schedule 06.06.2018
comment
Именно то, что я искал. Простой и элегантный. - person RaphaMex; 18.04.2019

использовать параметр per_page
@response = Price.search(params, per_page: 24)

person Shani    schedule 26.11.2017