gpt4 book ai didi

ruby-on-rails - Sunspot Solr全文搜索和will_paginate

转载 作者:行者123 更新时间:2023-12-04 06:27:53 27 4
gpt4 key购买 nike

以下查询就像一个魅力:

@styles = Style.search { fulltext params[:q] }

我遇到的问题是分页。这是带有分页的相同查询:
@styles = Style.search { fulltext params[:q]; paginate :page => params[:page], :per_page => params[:page_limit] }

我有 11 条 Style 记录。

如果我在搜索第 11 条记录时有 :page => 1:per_page => 10,我会得到一个为 @styles.results 返回的空数组

如果我设置 :page=>2 并进行相同的搜索,我将获得第 11 条样式记录。
[11] pry(#<StylesController>)> params[:page]=2
=> 2
[12] pry(#<StylesController>)> x=Style.search {fulltext params[:q]; paginate :page => params[:page], :per_page => params[:page_limit] }
=> <Sunspot::Search:{:fq=>["type:Style"], :q=>"hel", :fl=>"* score", :qf=>"name_textp full_name_textp", :defType=>"dismax", :start=>10, :rows=>10}>
[13] pry(#<StylesController>)> x.results
=> [#<Style id: 15...>]

我认为重点是对搜索结果进行分页,而不是完整的实际记录

这是怎么回事,我该如何解决?

编辑

好的,让我尝试以另一种方式解释这一点。假设我有这六个记录:
1 => 'a'
2 => 'b'
3 => 'c'
4 => 'd'
5 => 'e'
6 => 'f'

假设我尝试搜索 'f'
Letter.search { fulltext 'f'; paginate :page => 1, :per_page => 5 }

我的结果将是一个空数组 []
现在让我们说我尝试
Letter.search { fulltext 'f'; paginate :page => 1, :per_page => 6 }

现在我的结果是 [6 => 'f']

最佳答案

我的想法:

从 solr 获取结果,然后通过 solr 返回的 id 搜索您的模型并对它们进行分页,如下所示:

@search = Sunspot.search(Snippet) do
fulltext params[:search]
end
@styles = Style.where(id: @search.results.map(&:id)).page(params[:page]).per(5)

我从文档中了解到的内容: 我没试过

默认情况下,Sunspot 会从 Solr 请求前 30 个结果。这意味着您可以拥有 100 条可能符合搜索条件的记录,但您只会看到前 30 条记录,要查看其他记录,您必须将分页添加到 solr 搜索中,例如:
search = Style.search do
fulltext "my cool style"
paginate :page => 2
end

在这种情况下,您应该能够访问 2 页。要更新您需要编写的太阳黑子请求数:
search = Style.search do
fulltext "my cool style"
paginate :page => 1, :per_page => 50
end

它应该在一页中为您提供 50 个结果,或者 paginate :page => 2, :per_page => 50 和结果应分为 2 页,每页最多 50 个结果。

关于ruby-on-rails - Sunspot Solr全文搜索和will_paginate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17842631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com