class Solr::Query::Request::EdismaxAdapter

Constants

EDISMAX_ADDITIVE_BOOST_FUNCTION
EDISMAX_MULTIPLICATIVE_BOOST_FUNCTION
EDISMAX_PHRASE_BOOST
EDISMAX_PHRASE_SLOP
EDISMAX_QUERY_FIELDS
FIELD_LIST
FILTER_QUERY
JSON_FACET
QUERY_OPERATOR
RERANK_QUERY
SOLR_INFINITY

Attributes

request[R]

Public Class Methods

new(request) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 21
def initialize(request)
  @request = request
end

Public Instance Methods

to_h() click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 25
def to_h
  solr_params = { q: request.search_term, defType: :edismax }
  solr_params = add_query_fields(solr_params)
  solr_params = add_field_list(solr_params)
  solr_params = add_filters(solr_params)
  solr_params = add_facets(solr_params)
  solr_params = add_boosting(solr_params)
  solr_params = add_grouping(solr_params)
  solr_params = add_sorting(solr_params)
  solr_params = add_debug(solr_params)
  solr_params = add_spellcheck(solr_params)
  solr_params = add_rerank_query(solr_params)
  solr_params = add_phrase_slop(solr_params)
  solr_params = add_query_operator(solr_params)
  solr_params
end

Private Instance Methods

add_additive_boost_functions(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 69
def add_additive_boost_functions(solr_params)
  additive_boosts = request.boosting.additive_boost_functions.map(&:to_solr_s)
  if additive_boosts.any?
    solr_params[EDISMAX_ADDITIVE_BOOST_FUNCTION] = additive_boosts
  end
  solr_params
end
add_boosting(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 62
def add_boosting(solr_params)
  return solr_params unless request.boosting
  solr_params = add_additive_boost_functions(solr_params)
  solr_params = add_multiplicative_boost_functions(solr_params)
  add_phrase_boosts(solr_params)
end
add_debug(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 128
def add_debug(solr_params)
  solr_params[:debug] = debug_mode?
  solr_params
end
add_facets(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 56
def add_facets(solr_params)
  return solr_params if Array(request.facets).empty?
  solr_params[JSON_FACET] = request.facets.map(&:to_solr_h).reduce(&:merge).to_json
  solr_params
end
add_field_list(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 121
def add_field_list(solr_params)
  request.field_list.fields << :score if debug_mode?
  field_list = request.field_list.to_solr_s
  solr_params[FIELD_LIST] = field_list
  solr_params
end
add_filters(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 50
def add_filters(solr_params)
  filters = request.filters.map(&:to_solr_s)
  solr_params[FILTER_QUERY] = filters
  solr_params
end
add_grouping(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 103
def add_grouping(solr_params)
  return solr_params if request.grouping.empty?
  group_info = {
    'group' => true,
    'group.format' => 'grouped',
    'group.limit' => request.grouping.limit,
    'group.field' => solarize_field(request.grouping.field)
  }
  solr_params.merge(group_info)
end
add_multiplicative_boost_functions(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 77
def add_multiplicative_boost_functions(solr_params)
  multiplicative_boosts = request.boosting.multiplicative_boost_functions.map(&:to_solr_s)
  if multiplicative_boosts.any?
    solr_params[EDISMAX_MULTIPLICATIVE_BOOST_FUNCTION] = multiplicative_boosts
    # https://stackoverflow.com/questions/47025453/
    maybe_add_spatial_fields(solr_params, request.boosting.spatial_boost)
  else
    solr_params
  end
end
add_phrase_boosts(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 88
def add_phrase_boosts(solr_params)
  solr_phrase_boosts = request.boosting.phrase_boosts.map(&:to_solr_s)
  if solr_phrase_boosts.any?
    solr_params[EDISMAX_PHRASE_BOOST] = solr_phrase_boosts
  end
  solr_params
end
add_phrase_slop(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 148
def add_phrase_slop(solr_params)
  return solr_params unless request.phrase_slop
  solr_params[EDISMAX_PHRASE_SLOP] = request.phrase_slop
  solr_params
end
add_query_fields(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 44
def add_query_fields(solr_params)
  query_fields = request.query_fields.map(&:to_solr_s)
  solr_params[EDISMAX_QUERY_FIELDS] = query_fields
  solr_params
end
add_query_operator(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 154
def add_query_operator(solr_params)
  return solr_params unless request.query_operator
  solr_params[QUERY_OPERATOR] = request.query_operator
  solr_params
end
add_rerank_query(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 141
def add_rerank_query(solr_params)
  return solr_params unless request.limit_docs_by_field
  rerank_query = request.limit_docs_by_field.to_solr_s
  solr_params[RERANK_QUERY] = rerank_query
  solr_params
end
add_sorting(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 114
def add_sorting(solr_params)
  return solr_params if request.sorting.empty?
  solr_sorting = request.sorting.fields.map(&:to_solr_s).join(', ')
  solr_params[:sort] = solr_sorting
  solr_params
end
add_spellcheck(solr_params) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 137
def add_spellcheck(solr_params)
  solr_params.merge(request.spellcheck.to_h)
end
debug_mode?() click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 133
def debug_mode?
  request.debug_mode
end
maybe_add_spatial_fields(solr_params, geodist_function) click to toggle source
# File lib/solr/query/request/edismax_adapter.rb, line 96
def maybe_add_spatial_fields(solr_params, geodist_function)
  if geodist_function
    solr_params.merge!(pt: geodist_function.latlng, sfield: geodist_function.sfield)
  end
  solr_params
end