diff --git a/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb b/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb index 3980021..e367e10 100644 --- a/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb +++ b/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb @@ -26,7 +26,7 @@ class ElasticsearchPluginController < ApplicationController def define_searchable_types @searchable_types = searchable_types - @selected_type = (params[:selected_type]|| :all ).to_sym + @selected_type = (params[:selected_type] || :all).to_sym end def define_sort_types diff --git a/plugins/elasticsearch/helpers/elasticsearch_helper.rb b/plugins/elasticsearch/helpers/elasticsearch_helper.rb index 8cbd9b0..d90968f 100644 --- a/plugins/elasticsearch/helpers/elasticsearch_helper.rb +++ b/plugins/elasticsearch/helpers/elasticsearch_helper.rb @@ -48,7 +48,7 @@ module ElasticsearchHelper begin klass = model.to_s.classify.constantize filter = (params[:filter] || "" ).to_sym - query = get_query params[:query], klass: klass, sort_by: get_sort_by(filter,klass) + query = get_query params[:query], klass: klass, sort_by: get_sort_by(params[:filter],klass), categories: params[:categories] klass.search(query, size: default_per_page(params[:per_page])).page(params[:page]).records rescue [] @@ -87,28 +87,37 @@ module ElasticsearchHelper end - def query_method expression="", models=[] - { - query: { - filtered: { - query: query_string(expression,models), - filter: { - bool: { - should: models.map {|model| model.filter(environment: @environment.id) } - } - } + def query_method expression="", models=[], categories=[] + query = {} + query[:query] = { + filtered: { + query: query_string(expression, models), + filter: { + bool: {} } } } + + query[:query][:filtered][:filter][:bool] = { + should: models.map {|model| model.filter(environment: @environment.id) } + } + + unless categories.blank? + query[:query][:filtered][:filter][:bool][:must] = models.first.filter_category(categories) + end + + query end def get_query text="", options={} klass = options[:klass] sort_by = options[:sort_by] + categories = (options[:categories] || "").split(",") + categories = categories.map(&:to_i) models = (klass.nil?) ? searchable_models : [klass] - query = query_method(text, models) + query = query_method(text, models, categories) query[:sort] = sort_by if sort_by query diff --git a/plugins/elasticsearch/lib/searchable_model/filter.rb b/plugins/elasticsearch/lib/searchable_model/filter.rb index 1583b61..4efcf81 100644 --- a/plugins/elasticsearch/lib/searchable_model/filter.rb +++ b/plugins/elasticsearch/lib/searchable_model/filter.rb @@ -32,6 +32,15 @@ module Filter result_filter end + + def filter_category selected_categories + { + query: { + terms: { category_ids: selected_categories } + } + } + end + end module InstanceMethods diff --git a/plugins/elasticsearch/public/javascripts/categories.js b/plugins/elasticsearch/public/javascripts/categories.js index bad3d02..9906de1 100644 --- a/plugins/elasticsearch/public/javascripts/categories.js +++ b/plugins/elasticsearch/public/javascripts/categories.js @@ -1,15 +1,26 @@ var main = function() { - $('.categories ul li input').on("click", function() { - var categoryParam = ""; - if (window.location.href.search("categories") < 0) { - categoryParam += "&categories="; - } - if ($(".categories ul li input[checked]").length > 0){ - categoryParam += ("," + this.value); + var categories = [] + var categoryParam = ""; + var url = window.location.href; + var indexOfCategories; + + url = url.replace(/categories.*/g, ""); + url += "categories="; + + $(".categories ul li input[checked]").map(function(idx, element) { + categories.push(element.value); + }); + + $('.categories ul li input[type=checkbox]').on('click', function(){ + var idx = categories.indexOf(this.value); + if (idx == -1) { + categories.push(this.value); } else { - categoryParam += (this.value); + categories.splice(idx, 1); } - window.location.href += categoryParam; + + url += categories.join(","); + window.location.href = url; }); }; -- libgit2 0.21.2