elasticsearch_plugin_controller.rb 1.46 KB
class ElasticsearchPluginController < ApplicationController
  no_design_blocks

  def index
    search()
    render :action => 'search'
  end

  def search
    @results = []
    @query = params[:q]
    @checkbox = {}

    if params[:model].present?
      params[:model].keys.each do |model|
        model = model.singularize
        @checkbox[model.to_sym] = true
        klass = model.classify.constantize
        query = get_query params[:q], klass

        @results |= klass.__elasticsearch__.search(query).records.to_a
        puts "="*80
        puts @results.inspect
      end
    end

  end

  private

  def get_query text, klass
    query = {}
    unless text.blank?
    puts "="*80

       fields = klass::SEARCHABLE_FIELDS.map do |key, value|
         if value[:weight]
           "#{key}^#{value[:weight]}"
         else
           "#{key}"
         end
       end

       query = {
           query: {
               regexp: {
                   name: {
                     value: "*" + text + "*"

                   }
                 }
               }
       }
    end
    puts "="*80
    puts query.inspect
    query
  end

  def get_terms params
    terms = {}
    return terms unless params[:filter].present?
    params[:filter].keys.each do |model|
      terms[model] = {}
      params[:filter][model].keys.each do |filter|
        @checkbox[filter.to_sym] = true
        terms[model][params[:filter][model.to_sym][filter]] = filter
      end
    end
    terms
  end
end