diff --git a/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb b/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb index 49982a6..9128e2b 100644 --- a/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb +++ b/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb @@ -4,15 +4,37 @@ class ElasticsearchPluginController < ApplicationController def search @results = [] + @query = params[:q] + @checkbox = {} + if params[:model].present? + params[:model].keys.each do |model| + @checkbox[model.to_sym] = true + klass = model.classify.constantize + query = get_query params[:q], klass + @results += klass.__elasticsearch__.search(query).records.to_a + end + end - @checkbox = {:articles => params[:articles].present?, - :communities => params[:communities].present?, - :people => params[:people].present? - } + end + + private + + def get_query text, klass + query = {} + unless text.blank? + + fields = klass::SEARCHABLE_FIELDS.map {|k, v| "#{k}^#{v[:weight]}"} - @results += Article.__elasticsearch__.search('{}').records.to_a if params[:articles] - @results += Community.__elasticsearch__.search('{}').records.to_a if params[:communities] - @results += Person.__elasticsearch__.search('{}').records.to_a if params[:people] + query = { + query: { + multi_match: { + query: text, + fields: fields + } + } + } + end + query end end diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb index bf58e8a..61317c0 100644 --- a/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb +++ b/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb @@ -2,17 +2,17 @@ <%= form_tag controller: "elasticsearch_plugin", action: "search" do %> <%= label_tag(:q, _("Search")) %> - <%= text_field_tag(:q) %> + <%= text_field_tag(:q, @query) %> <%= submit_tag _("Send") %> - <%= check_box_tag 'communities', 1, @checkbox[:communities] %> + <%= check_box_tag 'model[communities]', 1, @checkbox[:communities] %> <%= label_tag('communities', _("communities")) %> - <%= check_box_tag 'people', 1, @checkbox[:people] %> + <%= check_box_tag 'model[people]', 1, @checkbox[:people] %> <%= label_tag('people', _("people")) %> - <%= check_box_tag 'articles', 1, @checkbox[:articles] %> + <%= check_box_tag 'model[articles]', 1, @checkbox[:articles] %> <%= label_tag('articles', _("articles")) %> <% end %> -- libgit2 0.21.2