lib/sunspot/query.rb in sunspot-0.9.8 vs lib/sunspot/query.rb in sunspot-0.10.0
- old
+ new
@@ -1,191 +1,5 @@
-%w(base_query scope field_query connective dynamic_query field_facet query_facet
- query_facet_row query_field_facet pagination restriction sort
- sort_composite).each do |file|
- require File.join(File.dirname(__FILE__), 'query', file)
-end
-
+%w(connective boost_query dismax field_facet highlighting local pagination restriction query query_facet query_field_facet query_facet_row scope sort sort_composite text_field_boost).each { |file| require(File.join(File.dirname(__FILE__), 'query', file)) }
module Sunspot
- module Query #:nodoc:
- #
- # This class encapsulates a query that is to be sent to Solr. The query is
- # constructed in the block passed to the Sunspot.search method, using the
- # Sunspot::DSL::Query interface. It can also be accessed directly by calling
- # #query on a Search object (presumably a not-yet-run one created using
- # Sunspot#new_search), which might be more suitable than the DSL when an
- # intermediate object has responsibility for building the query dynamically.
- #--
- # Instances of Query, as well as all of the components it contains, respond to
- # the #to_params method, which returns a hash of parameters in the format
- # recognized by the solr-ruby API.
- #
- class Query < FieldQuery
- attr_reader :query_facets #:nodoc:
-
- def initialize(types, setup, configuration) #:nodoc:
- @setup = setup
- @components = []
- @query_facets = {}
- @components << @base_query = BaseQuery.new(types, setup)
- @components << @pagination = Pagination.new(configuration)
- @components << @sort = SortComposite.new
- end
-
- #
- # Set the keywords for this query. Keywords are parsed with Solr's dismax
- # handler.
- #
- def keywords=(keywords)
- set_keywords(keywords)
- end
-
- #
- # Add a component to the query. Used by objects that proxy to the query
- # object.
- #
- # ==== Parameters
- #
- # component<~to_params>:: Query component to add.
- #
- def add_component(component) #:nodoc:
- @components << component
- end
-
- #
- # Sets @start and @rows instance variables using pagination semantics
- #
- # ==== Parameters
- #
- # page<Integer>:: Page on which to start
- # per_page<Integer>::
- # How many rows to display per page. Default taken from
- # Sunspot.config.pagination.default_per_page
- #
- def paginate(page, per_page = nil)
- @pagination.page, @pagination.per_page = page, per_page
- end
-
- #
- # Add random ordering to the search. This can be added after other
- # field-based sorts if desired.
- #
- def order_by_random
- add_sort(Sort.new(RandomField.new))
- end
-
- #
- # Representation of this query as solr-ruby parameters. Constructs the hash
- # by deep-merging scope and facet parameters, adding in various other
- # parameters from instance data.
- #
- # Note that solr-ruby takes the :q parameter as a separate argument; for
- # the sake of consistency, the Query object ignores this fact (the Search
- # object extracts it back out).
- #
- # ==== Returns
- #
- # Hash:: Representation of query in solr-ruby form
- #
- def to_params #:nodoc:
- params = {}
- query_components = []
- for component in @components
- Util.deep_merge!(params, component.to_params)
- end
- params
- end
-
- #
- # Page that this query will return (used by Sunspot::Search to expose
- # pagination)
- #
- # ==== Returns
- #
- # Integer:: Page number
- #
- def page #:nodoc:
- @pagination.page
- end
-
- #
- # Number of rows per page that this query will return (used by
- # Sunspot::Search to expose pagination)
- #
- # ==== Returns
- #
- # Integer:: Rows per page
- #
- def per_page #:nodoc:
- @pagination.per_page
- end
-
- #
- # Get the query facet with the given name. Used by the Search object to
- # match query facet results with the requested query facets.
- #
- def query_facet(name) #:nodoc:
- @query_facets[name.to_sym]
- end
-
- #
- # Add a Sort object into this query's sort composite.
- #
- def add_sort(sort) #:nodoc:
- @sort << sort
- end
-
- #
- # Set the keywords for this query, along with keyword options. See
- # Query::BaseQuery for information on what the options do.
- #
- def set_keywords(keywords, options = {}) #:nodoc:
- @base_query.keywords = keywords
- @base_query.keyword_options = options
- end
-
- #
- # Pass in search options as a hash. This is not the preferred way of
- # building a Sunspot search, but it is made available as experience shows
- # Ruby developers like to pass in hashes. Probably nice for quick one-offs
- # on the console, anyway.
- #
- # ==== Options (+options+)
- #
- # :keywords:: Keyword string for fulltext search
- # :conditions::
- # Hash of key-value pairs, where keys are field names, and values are one
- # of scalar, Array, or Range. Scalars are evaluated as EqualTo
- # restrictions; Arrays are AnyOf restrictions, and Ranges are Between
- # restrictions.
- # :order::
- # Order the search results. Either a string or array of strings of the
- # form "field_name direction"
- # :page::
- # Page to use for pagination
- # :per_page::
- # Number of results to show per page
- #
- def options=(options) #:nodoc:
- if options.has_key?(:keywords)
- self.keywords = options[:keywords]
- end
- if options.has_key?(:conditions)
- options[:conditions].each_pair do |field_name, value|
- begin
- add_shorthand_restriction(field_name, value)
- rescue UnrecognizedFieldError
- # ignore fields we don't recognize
- end
- end
- end
- if options.has_key?(:order)
- for order in Array(options[:order])
- order_by(*order.split(' '))
- end
- end
- if options.has_key?(:page)
- paginate(options[:page], options[:per_page])
- end
- end
- end
+ module Query #:nodoc:all
end
end