Commit dedc285f697f25aa45f83d46d8c599adabf03c63

Authored by Braulio Bhavamitra
1 parent 44bc22ee

Speed up find_by_contents

Only search the content for one page, loading more than a hundred
results is slow cause solr send xmls for us to parse.
Showing 1 changed file with 7 additions and 6 deletions   Show diff stats
lib/acts_as_searchable.rb
@@ -29,7 +29,9 @@ module ActsAsSearchable @@ -29,7 +29,9 @@ module ActsAsSearchable
29 end 29 end
30 30
31 def find_by_contents(query, pg_options = {}, options = {}, db_options = {}) 31 def find_by_contents(query, pg_options = {}, options = {}, db_options = {})
32 - options[:limit] = 1000000; 32 + pg_options[:page] ||= 1
  33 + pg_options[:per_page] ||= 20
  34 + options[:limit] = pg_options[:per_page].to_i*pg_options[:page].to_i
33 options[:scores] = true; 35 options[:scores] = true;
34 36
35 query = !schema_name.empty? ? "+schema_name:\"#{schema_name}\" AND #{query}" : query 37 query = !schema_name.empty? ? "+schema_name:\"#{schema_name}\" AND #{query}" : query
@@ -37,7 +39,8 @@ module ActsAsSearchable @@ -37,7 +39,8 @@ module ActsAsSearchable
37 if solr_result.nil? 39 if solr_result.nil?
38 results = facets = [] 40 results = facets = []
39 else 41 else
40 - facets = options.include?(:facets) ? solr_result.facets : {} 42 + facets = options.include?(:facets) ? solr_result.facets : []
  43 +
41 if db_options.empty? 44 if db_options.empty?
42 results = solr_result.results 45 results = solr_result.results
43 else 46 else
@@ -54,12 +57,10 @@ module ActsAsSearchable @@ -54,12 +57,10 @@ module ActsAsSearchable
54 57
55 results = find(:all, db_options) 58 results = find(:all, db_options)
56 end 59 end
57 - end  
58 60
59 - if !pg_options.empty?  
60 - pg_options[:page] ||= 1  
61 - results = results.paginate(pg_options) 61 + results = results.paginate(pg_options.merge(:total_entries => solr_result.total))
62 end 62 end
  63 +
63 {:results => results, :facets => facets} 64 {:results => results, :facets => facets}
64 end 65 end
65 end 66 end