SOLR-108: Request::Standard cleanup (contributed by William Groppe), with slight addition to fix failing test because rows became zero instead of nil

git-svn-id: https://svn.apache.org/repos/asf/incubator/solr/trunk@496551 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Erik Hatcher 2007-01-16 00:41:47 +00:00
parent 9737c076ae
commit 162dbee7ea
1 changed files with 38 additions and 36 deletions

View File

@ -13,64 +13,66 @@
module Solr module Solr
module Request module Request
class Standard < Solr::Request::Select class Standard < Solr::Request::Select
VALID_PARAMS = [:query, :sort, :default_field, :operator, :start, :rows,
:filter_queries, :field_list, :debug_query, :explain_other, :facets]
def initialize(params) def initialize(params)
super('standard') super('standard')
raise "Invalid parameters: #{(params.keys - VALID_PARAMS).join(',')}" unless
(params.keys - VALID_PARAMS).empty?
raise ":query parameter required" unless params[:query] raise ":query parameter required" unless params[:query]
# devour StandardRequestHandler params @params = params.dup
@query = params.delete(:query)
@sort = params.delete(:sort) # TODO add validation such that only :ascending and :descending are supported
@default_field = params.delete(:default_field)
@operator = params.delete(:operator)
@operator = @operator == :and ? "AND" : "OR" if @operator # TODO add validation such that only :and or :or are supported
# devour common parameters # Validate operator
@start = params.delete(:start) # TODO validate integer if params[:operator]
@rows = params.delete(:rows) # TODO validate integer raise "Only :and/:or operators allowed" unless
@filter_queries = params.delete(:filter_queries) [:and, :or].include?(params[:operator])
@field_list = params.delete(:field_list) || ["*","score"]
@debug_query = params.delete(:debug_query)
@explain_other = params.delete(:explain_other)
# devour faceting parameters @params[:operator] = params[:operator].to_s.upcase
@facets = params.delete(:facets) end
# Validate start, rows can be transformed to ints
@params[:start] = params[:start].to_i if params[:start]
@params[:rows] = params[:rows].to_i if params[:rows]
@params[:field_list] ||= ["*","score"]
#TODO model highlighting parameters: http://wiki.apache.org/solr/HighlightingParameters #TODO model highlighting parameters: http://wiki.apache.org/solr/HighlightingParameters
raise "Invalid parameters: #{params.keys.join(',')}" if params.size > 0
end end
def to_hash def to_hash
hash = {} hash = {}
# standard request param processing # standard request param processing
sort = @sort.collect do |sort| sort = @params[:sort].collect do |sort|
key = sort.keys[0] key = sort.keys[0]
"#{key.to_s} #{sort[key] == :descending ? 'desc' : 'asc'}" "#{key.to_s} #{sort[key] == :descending ? 'desc' : 'asc'}"
end.join(',') if @sort end.join(',') if @params[:sort]
q = sort ? "#{@query};#{sort}" : @query hash[:q] = sort ? "#{@params[:query]};#{sort}" : @params[:query]
hash[:q] = q hash[:"q.op"] = @params[:operator]
hash[:"q.op"] = @operator hash[:df] = @params[:default_field]
hash[:df] = @default_field
# common parameter processing # common parameter processing
hash[:start] = @start hash[:start] = @params[:start]
hash[:rows] = @rows hash[:rows] = @params[:rows]
hash[:fq] = @filter_queries hash[:fq] = @params[:filter_queries]
hash[:fl] = @field_list.join(',') hash[:fl] = @params[:field_list].join(',')
hash[:debugQuery] = @debug_query hash[:debugQuery] = @params[:debug_query]
hash[:explainOther] = @explain_other hash[:explainOther] = @params[:explain_other]
# facet parameter processing # facet parameter processing
if @facets if @params[:facets]
hash[:facet] = true hash[:facet] = true
hash[:"facet.field"] = [] hash[:"facet.field"] = []
hash[:"facet.query"] = @facets[:queries] hash[:"facet.query"] = @params[:facets][:queries]
hash[:"facet.missing"] = @facets[:missing] hash[:"facet.missing"] = @params[:facets][:missing]
hash[:"facet.zeros"] = @facets[:zeros] hash[:"facet.zeros"] = @params[:facets][:zeros]
hash[:"facet.limit"] = @facets[:limit] hash[:"facet.limit"] = @params[:facets][:limit]
@facets[:fields].each do |f| @params[:facets][:fields].each do |f|
if f.kind_of? Hash if f.kind_of? Hash
key = f.keys[0] key = f.keys[0]
value = f[key] value = f[key]