This class encapsulates the results of a Solr search. It provides access to search results, total result count, facets, and pagination information. Instances of Search are returned by the Sunspot.search and Sunspot.new_search methods.
Retrieve all facet objects defined for this search, in order they were defined. To retrieve an individual facet by name, use facet()
Retrieve all facet objects defined for this search, in order they were defined. To retrieve an individual facet by name, use facet()
Retrieve all facet objects defined for this search, in order they were defined. To retrieve an individual facet by name, use facet()
Build this search using a DSL block. This method can be called more than once on an unexecuted search (e.g., Sunspot.new_search) in order to build a search incrementally.
search = Sunspot.new_search(Post) search.build do with(:published_at).less_than Time.now end search.execute
# File lib/sunspot/search/abstract_search.rb, line 217 def build(&block) Util.instance_eval_or_call(dsl, &block) self end
Execute the search on the Solr instance and store the results. If you use Sunspot#search() to construct your searches, there is no need to call this method as it has already been called. If you use Sunspot#new_search(), you will need to call this method after building the query.
# File lib/sunspot/search/abstract_search.rb, line 46 def execute reset params = @query.to_params @solr_result = @connection.post "#{request_handler}", :data => params self end
Get the facet object for the given name. `name` can either be the name given to a query facet, or the field name of a field facet. Returns a Sunspot::Facet object.
Name of the field to return the facet for, or the name given to the query facet when the search was constructed.
If faceting on a dynamic field, this is the dynamic portion of the field name.
search = Sunspot.search(Post) do facet :category_ids dynamic :custom do facet :cuisine end facet :age do row 'Less than a month' do with(:published_at).greater_than(1.month.ago) end row 'Less than a year' do with(:published_at, 1.year.ago..1.month.ago) end row 'More than a year' do with(:published_at).less_than(1.year.ago) end end end search.facet(:category_ids) #=> Facet for :category_ids field search.facet(:custom, :cuisine) #=> Facet for the dynamic field :cuisine in the :custom field definition search.facet(:age) #=> Facet for the query facet named :age
# File lib/sunspot/search/abstract_search.rb, line 161 def facet(name, dynamic_name = nil) if name facet_name = if dynamic_name separator = @setup.dynamic_field_factory(name).separator [name, dynamic_name].join(separator) else name end.to_sym @facets_by_name[facet_name] end end
# File lib/sunspot/search/abstract_search.rb, line 179 def group(name) if name @groups_by_name[name.to_sym] end end
Access raw Solr result information. Returns a collection of Hit objects that contain the class name, primary key, keyword relevance score (if applicable), and any stored fields.
Only return hits that reference objects that actually exist in the data store. This causes results to be eager-loaded from the data store, unlike the normal behavior of this method, which only loads the referenced results when Sunspot::Search::Hit#result is first called.
Ordered collection of Hit objects
# File lib/sunspot/search/abstract_search.rb, line 90 def hits(options = {}) if options[:verify] super else @hits ||= paginate_collection(super) end end
The time elapsed to generate the Solr response
Query runtime in milliseconds
# File lib/sunspot/search/abstract_search.rb, line 117 def query_time @query_time ||= solr_response_header['QTime'] end
Get the collection of results as instantiated objects. If WillPaginate is available, the results will be a WillPaginate::Collection instance; if not, it will be a vanilla Array.
If not all of the results referenced by the Solr hits actually exist in the data store, Sunspot will only return the results that do exist.
Instantiated result objects
# File lib/sunspot/search/abstract_search.rb, line 69 def results @results ||= paginate_collection(verified_hits.map { |hit| hit.instance }) end
The total number of documents matching the query parameters
Total matching documents
# File lib/sunspot/search/abstract_search.rb, line 106 def total @total ||= solr_response['numFound'] || 0 end