Ruby中SearchKick高级搜索body参数如何传入limit与offset?
在SearchKick中使用body参数时添加分页(limit/offset)的两种方法
嘿,我来帮你搞定这个分页问题~当你用SearchKick的body参数自定义Elasticsearch请求时,有两种简单的方式传入limit和offset:
方法1:直接在search方法中传入分页参数
SearchKick的search方法本身支持顶级的limit和offset参数,即使你已经指定了body,它也会自动把这两个参数转换成Elasticsearch对应的size(对应limit)和from(对应offset),并合并到最终的请求体里。这样你完全不用修改现有的search_body方法:
# 直接在search调用里加limit和offset Product.search(body: search_body, load: false, limit: 10, offset: 15)
这个方式最省心,适合你只是需要快速添加分页,不想改动请求体逻辑的场景。
方法2:把分页参数放到search_body的请求体中
如果你希望所有的请求配置都统一放在body里,可以直接在search_body中添加Elasticsearch原生的size(对应limit)和from(对应offset)字段。你可以给search_body方法加参数来动态传入分页值:
def search_body(limit: 10, offset: 15) { _source: true, size: limit, # 对应limit参数 from: offset, # 对应offset参数 query: { bool: { must: [ { match: { name: { query: product.name, fuzziness: 'auto', operator: 'and', }, }, }, ], }, }, } end
然后调用的时候传入对应的参数:
Product.search(body: search_body(limit: 10, offset: 15), load: false)
这种方式适合你需要完全掌控Elasticsearch请求体结构的场景,所有配置都集中在一处。
简单总结下:两种方式都能实现你的需求,选哪种取决于你是否希望把分页参数和请求体逻辑绑定在一起~
内容的提问来源于stack exchange,提问作者Rakib
相关产品推荐
相关产品推荐

