The following query is working like a charm:
@styles = Style.search { fulltext params[:q] }
The problem I'm having is with pagination. Here is the same query with pagination:
@styles = Style.search { fulltext params[:q]; paginate :page => params[:page], :per_page => params[:page_limit] }
I have 11 Style
records.
If I have :page => 1
and :per_page => 10
when I search for the 11th record, I get an empty array returned for @styles.results
If I set :page=>2
and do the same search I get the 11th style record.
[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...>]
I thought the point was to paginate the search results, not the actual records in their entirety
What's going on here, and how do I fix it?
EDIT
Ok, let me try explaining this another way. Let's say I have these six records:
1 => 'a'
2 => 'b'
3 => 'c'
4 => 'd'
5 => 'e'
6 => 'f'
Let's say I try to search for 'f'
Letter.search { fulltext 'f'; paginate :page => 1, :per_page => 5 }
My result will be an empty array []
Now let's say I try
Letter.search { fulltext 'f'; paginate :page => 1, :per_page => 6 }
Now my result is [6 => 'f']
my thoughts:
get the results from solr then search your model by ids that solr returned and paginate them, something like this:
@search = Sunspot.search(Snippet) do
fulltext params[:search]
end
@styles = Style.where(id: @search.results.map(&:id)).page(params[:page]).per(5)
what I understood from docs: I didn't tried it
By default, Sunspot requests the first 30 results from Solr. That means you can have 100 of records that might match the searching criteria but you'll see only the first 30, to see the others you have to add the paginate to your solr search, like:
search = Style.search do
fulltext "my cool style"
paginate :page => 2
end
in this case, you should be able to access 2 page. To update the number of sunspot requests you need to write:
search = Style.search do
fulltext "my cool style"
paginate :page => 1, :per_page => 50
end
it should give you 50 results in one page, or paginate :page => 2, :per_page => 50
and results should be divided in 2 pages with max 50 results each.
Try supply a fallback to per_page
like so:
@search = Style.search do
fulltext params[:q]
paginate(page: params[:page], per_page: (params[:per] || 15))
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With