To search according to passed parameters
# File app/models/concerns/tutor_search.rb, line 83 def self.search(params) @search_definition = { query: {filtered: {filter: {bool: {must: {and: [{term: {searchable: true}}]}}}}}, sort: [ { average_rating: {order: :desc}} ] } unless params[:query].blank? @search_definition[:query][:filtered][:query] ||= {} @search_definition[:query][:filtered][:query][:multi_match] = { query: params[:query], fields: ['full_name'], type: "phrase_prefix" } end unless params[Category.model_name.human.downcase.to_sym].blank? @search_definition[:query][:filtered][:query] = { match: { "categories.name" => {query: params[Category.model_name.human.downcase.to_sym], type: "phrase_prefix"} } } end unless params[Subject.model_name.human.downcase.to_sym].blank? @search_definition[:query][:filtered][:query] = { multi_match: { query: params[Subject.model_name.human.downcase.to_sym], type: "phrase_prefix" } } @search_definition[:query][:filtered][:query][:multi_match][:fields] = [ "courses.name", "courses.alternate_name", "courses.subject_name" ] end if params[:rates].present? || params[:ratings].present? @search_definition[:query].delete(:match_all) {:rates => :rate_in_cents_with_charge, ratings: :average_rating}.each do |param_name, field_name| unless params[param_name].blank? range = params[param_name].split('-') @search_definition[:query][:filtered][:filter][:bool][:must][:and] << { range: { field_name => { gte: range.first.to_i, lte: range.last.to_i }} } end end end __elasticsearch__.search(@search_definition) end
This will return all the relevant rows from the database in json format
# File app/models/concerns/tutor_search.rb, line 39 def as_indexed_json(options={}) { id: id, name: name, full_name: full_name, email: email, searchable: searchable?, average_rating: average_rating, rate_in_cents_with_charge: rate_in_cents_with_charge, subjects: subjects.map { |s| { _type: 'subject', _id: s.id, name: s.name } }, courses: courses.includes(:subject).map { |c| { _type: 'course', _id: c.id, name: c.name, alternate_name: c.alternate_name, subject_name: c.subject_name } }, categories: categories.map { |t| { _type: 'category', _id: t.id, name: t.name, } } } end
Calls Superclass Method
# File app/models/concerns/tutor_search.rb, line 76 def as_json(options={}) json = super(options) json[:_type] = "tutor" json end