You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:18:46