To search according to passed parameters
# File app/models/concerns/course_search.rb, line 84 def self.search(params) @search_definition = {query: {filtered: {}}, sort: [{name: {order: :asc}}]} unless params[:subject_id].blank? @search_definition[:query][:filtered][:filter] = {bool: {must: {and: [{term: {subject_id: params[:subject_id]}}]}}} end if !params[:without_tutor_existence] @search_definition[:query][:filtered][:filter] ||= {} @search_definition[:query][:filtered][:filter][:exists] = { field: 'tutors' } end unless params[:query].blank? if !params[:without_tutor_existence] @search_definition[:query][:filtered][:query] = { multi_match: { query: params[:query], fields: [ "name", "alternate_name", "subject.name", "teachers", "mini_description" ], type: "phrase_prefix" } } else @search_definition[:query][:filtered][:query] = { multi_match: { query: params[:query], fields: [ "name", "alternate_name", "subject.name", "tutors.name", "teachers", "mini_description" ], type: "phrase_prefix" } } end end __elasticsearch__.search(@search_definition) end
This will return all the relevant rows from the database in json format
# File app/models/concerns/course_search.rb, line 34 def as_indexed_json(options=[]) { id: id, name: name, description: description, alternate_name: alternate_name, subject_id: subject_id, teachers: teachers, mini_description: mini_description, subject: { _type: 'subject', _id: subject.id, name: subject.name, description: subject.description }, # school: { # _type: 'school', # _id: school.id, # name: school.name # }, tutors: tutors.map{ |t| { _type: 'tutor', _id: t.id, name: t.name } } } end
Calls Superclass Method
# File app/models/concerns/course_search.rb, line 65 def as_json(options={}) json = super(options) json[:_type] = "course" json end