จำกัดจำนวนผลลัพธ์ของ Elasticsearch ใน Rails

ฉันใช้ Rails กับ Elasticsearch โดยใช้ elasticsearch-rails และ will_paginate gems และสิ่งต่าง ๆ ทำงานได้ดีมาก

ปัญหาเดียวที่ฉันมีคือจำนวนบันทึกของฉันเพิ่มขึ้นมากกว่า 10,000 ซึ่งทำให้เกิดข้อผิดพลาด "หน้าต่างผลลัพธ์ใหญ่เกินไป ขนาดจาก + ต้องน้อยกว่าหรือเท่ากับ: [10,000] แต่เป็น [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