To search according to passed parameters
# File app/models/concerns/user_search.rb, line 7 def self.search(params) search_query = {query: {filtered: {filter: {bool: {must: {and: [{term: {searchable: true}}]}}}}}} unless params[:query].blank? search_query[:query][:filtered][:query] = { multi_match: {query: params[:query], type: 'phrase_prefix', fields: ['name', 'full_name', 'email', 'courses.name', 'courses.alternate_name', 'courses.subject_name', 'courses_studying.name', 'courses_studying.altrename_name', 'courses_studying.subject_name']}} end results = Elasticsearch::Model.search(search_query, [Student, Tutor]).page(params[:page]).per(params[:per]).results users = User.where(id: results.map{|r| r['_id']}) [:current_page, :total_pages, :total_count].each do |method_name| users.instance_variable_set("@#{method_name}".to_sym, results.send(method_name)) users.define_singleton_method(method_name) do instance_variable_get("@#{method_name}".to_sym) end end users end