Commit b4d274ac026384670984bf265046549a9d3c39e6
1 parent
6e82bdc7
Exists in
master
and in
29 other branches
[otw] Deicinding whether to keed index or not... =(
Showing
15 changed files
with
52 additions
and
210 deletions
Show diff stats
app/controllers/public/search_controller.rb
@@ -4,7 +4,7 @@ class SearchController < PublicController | @@ -4,7 +4,7 @@ class SearchController < PublicController | ||
4 | include SearchHelper | 4 | include SearchHelper |
5 | include ActionView::Helpers::NumberHelper | 5 | include ActionView::Helpers::NumberHelper |
6 | 6 | ||
7 | - before_filter :redirect_asset_param, :except => [:facets_browse, :assets] | 7 | + before_filter :redirect_asset_param, :except => :assets |
8 | before_filter :load_category | 8 | before_filter :load_category |
9 | before_filter :load_search_assets | 9 | before_filter :load_search_assets |
10 | before_filter :load_query | 10 | before_filter :load_query |
@@ -18,19 +18,6 @@ class SearchController < PublicController | @@ -18,19 +18,6 @@ class SearchController < PublicController | ||
18 | 18 | ||
19 | no_design_blocks | 19 | no_design_blocks |
20 | 20 | ||
21 | - def facets_browse | ||
22 | - @asset = params[:asset].to_sym | ||
23 | - @asset_class = asset_class(@asset) | ||
24 | - | ||
25 | - @facets_only = true | ||
26 | - send(@asset) | ||
27 | - | ||
28 | - @facet = @asset_class.map_facets_for(environment).find { |facet| facet[:id] == params[:facet_id] } | ||
29 | - raise 'Facet not found' if @facet.nil? | ||
30 | - | ||
31 | - render :layout => false | ||
32 | - end | ||
33 | - | ||
34 | def articles | 21 | def articles |
35 | if @search_engine && !@empty_query | 22 | if @search_engine && !@empty_query |
36 | full_text_search | 23 | full_text_search |
@@ -54,21 +41,10 @@ class SearchController < PublicController | @@ -54,21 +41,10 @@ class SearchController < PublicController | ||
54 | end | 41 | end |
55 | 42 | ||
56 | def products | 43 | def products |
57 | - if @search_engine && !@empty_query | 44 | + if @search_engine |
58 | full_text_search | 45 | full_text_search |
59 | else | 46 | else |
60 | - @geosearch = logged_in? && current_user.person.lat && current_user.person.lng | ||
61 | - | ||
62 | - extra_limit = LIST_SEARCH_LIMIT*5 | ||
63 | - sql_options = {:limit => LIST_SEARCH_LIMIT, :order => 'random()'} | ||
64 | - if @geosearch | ||
65 | - full_text_search :sql_options => sql_options, :extra_limit => extra_limit, | ||
66 | - :alternate_query => "{!boost b=recip(geodist(),#{"%e" % (1.to_f/DistBoost)},1,1)}", | ||
67 | - :radius => DistFilt, :latitude => current_user.person.lat, :longitude => current_user.person.lng | ||
68 | - else | ||
69 | - full_text_search :sql_options => sql_options, :extra_limit => extra_limit, | ||
70 | - :boost_functions => ['recip(ms(NOW/HOUR,updated_at),1.3e-10,1,1)'] | ||
71 | - end | 47 | + @results[@asset] = @environment.products.send(@filter).paginate(paginate_options) |
72 | end | 48 | end |
73 | render :template => 'search/search_page' | 49 | render :template => 'search/search_page' |
74 | end | 50 | end |
@@ -120,52 +96,12 @@ class SearchController < PublicController | @@ -120,52 +96,12 @@ class SearchController < PublicController | ||
120 | @next_calendar = populate_calendar(date + 1.month, events) | 96 | @next_calendar = populate_calendar(date + 1.month, events) |
121 | end | 97 | end |
122 | 98 | ||
123 | - def index | ||
124 | - @results = {} | ||
125 | - @order = [] | ||
126 | - @names = {} | ||
127 | - @results_only = true | ||
128 | - | ||
129 | - @enabled_searches.select { |key,description| @searching[key] }.each do |key, description| | ||
130 | - load_query | ||
131 | - @asset = key | ||
132 | - send(key) | ||
133 | - @order << key | ||
134 | - @names[key] = getterm(description) | ||
135 | - end | ||
136 | - @asset = nil | ||
137 | - @facets = {} | ||
138 | - | ||
139 | - render :action => @results.keys.first if @results.keys.size == 1 | ||
140 | - end | ||
141 | - | ||
142 | # keep old URLs workings | 99 | # keep old URLs workings |
143 | def assets | 100 | def assets |
144 | params[:action] = params[:asset].is_a?(Array) ? :index : params.delete(:asset) | 101 | params[:action] = params[:asset].is_a?(Array) ? :index : params.delete(:asset) |
145 | redirect_to params | 102 | redirect_to params |
146 | end | 103 | end |
147 | 104 | ||
148 | - # view the summary of one category | ||
149 | - def category_index | ||
150 | - @results = {} | ||
151 | - @order = [] | ||
152 | - @names = {} | ||
153 | - limit = MULTIPLE_SEARCH_LIMIT | ||
154 | - [ | ||
155 | - [ :people, _('People'), :recent_people ], | ||
156 | - [ :enterprises, _('Enterprises'), :recent_enterprises ], | ||
157 | - [ :products, _('Products'), :recent_products ], | ||
158 | - [ :events, _('Upcoming events'), :upcoming_events ], | ||
159 | - [ :communities, _('Communities'), :recent_communities ], | ||
160 | - [ :articles, _('Contents'), :recent_articles ] | ||
161 | - ].each do |asset, name, filter| | ||
162 | - @order << asset | ||
163 | - @results[asset] = @category.send(filter, limit) | ||
164 | - raise "No total_entries for: #{asset}" unless @results[asset].respond_to?(:total_entries) | ||
165 | - @names[asset] = name | ||
166 | - end | ||
167 | - end | ||
168 | - | ||
169 | def tags | 105 | def tags |
170 | @tags_cache_key = "tags_env_#{environment.id.to_s}" | 106 | @tags_cache_key = "tags_env_#{environment.id.to_s}" |
171 | if is_cache_expired?(@tags_cache_key) | 107 | if is_cache_expired?(@tags_cache_key) |
@@ -260,7 +196,7 @@ class SearchController < PublicController | @@ -260,7 +196,7 @@ class SearchController < PublicController | ||
260 | @titles = {} | 196 | @titles = {} |
261 | @enabled_searches.each do |key, name| | 197 | @enabled_searches.each do |key, name| |
262 | @titles[key] = _(name) | 198 | @titles[key] = _(name) |
263 | - @searching[key] = params[:action] == 'index' || params[:action] == key.to_s | 199 | + @searching[key] = params[:action] == key.to_s |
264 | end | 200 | end |
265 | @names = @titles if @names.nil? | 201 | @names = @titles if @names.nil? |
266 | end | 202 | end |
app/helpers/search_helper.rb
@@ -4,8 +4,6 @@ module SearchHelper | @@ -4,8 +4,6 @@ module SearchHelper | ||
4 | LIST_SEARCH_LIMIT = 20 | 4 | LIST_SEARCH_LIMIT = 20 |
5 | BLOCKS_SEARCH_LIMIT = 24 | 5 | BLOCKS_SEARCH_LIMIT = 24 |
6 | MULTIPLE_SEARCH_LIMIT = 8 | 6 | MULTIPLE_SEARCH_LIMIT = 8 |
7 | - DistFilt = 200 | ||
8 | - DistBoost = 50 | ||
9 | 7 | ||
10 | Searches = ActiveSupport::OrderedHash[ | 8 | Searches = ActiveSupport::OrderedHash[ |
11 | :articles, _('Contents'), | 9 | :articles, _('Contents'), |
@@ -16,37 +14,11 @@ module SearchHelper | @@ -16,37 +14,11 @@ module SearchHelper | ||
16 | :events, _('Events'), | 14 | :events, _('Events'), |
17 | ] | 15 | ] |
18 | 16 | ||
19 | - SortOptions = { | ||
20 | - :products => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | ||
21 | - :more_recent, {:label => _('More recent'), :solr_opts => {:sort => 'updated_at desc, score desc'}}, | ||
22 | - :name, {:label => _('Name'), :solr_opts => {:sort => 'solr_plugin_name_sortable asc'}}, | ||
23 | - :closest, {:label => _('Closest to me'), :if => proc{ logged_in? && (profile=current_user.person).lat && profile.lng }, | ||
24 | - :solr_opts => {:sort => "geodist() asc", | ||
25 | - :latitude => proc{ current_user.person.lat }, :longitude => proc{ current_user.person.lng }}}, | ||
26 | - ], | ||
27 | - :events => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | ||
28 | - :name, {:label => _('Name'), :solr_opts => {:sort => 'solr_plugin_name_sortable asc'}}, | ||
29 | - ], | ||
30 | - :articles => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | ||
31 | - :name, {:label => _('Name'), :solr_opts => {:sort => 'solr_plugin_name_sortable asc'}}, | ||
32 | - :more_recent, {:label => _('More recent'), :solr_opts => {:sort => 'updated_at desc, score desc'}}, | ||
33 | - ], | ||
34 | - :enterprises => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | ||
35 | - :name, {:label => _('Name'), :solr_opts => {:sort => 'solr_plugin_name_sortable asc'}}, | ||
36 | - ], | ||
37 | - :people => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | ||
38 | - :name, {:label => _('Name'), :solr_opts => {:sort => 'solr_plugin_name_sortable asc'}}, | ||
39 | - ], | ||
40 | - :communities => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | ||
41 | - :name, {:label => _('Name'), :solr_opts => {:sort => 'solr_plugin_name_sortable asc'}}, | ||
42 | - ], | ||
43 | - } | ||
44 | - | ||
45 | # FIXME remove it after search_controler refactored | 17 | # FIXME remove it after search_controler refactored |
46 | include EventsHelper | 18 | include EventsHelper |
47 | 19 | ||
48 | def multiple_search? | 20 | def multiple_search? |
49 | - ['index', 'category_index'].include?(params[:action]) or @results.size > 1 | 21 | + @results.size > 1 |
50 | end | 22 | end |
51 | 23 | ||
52 | def map_search? | 24 | def map_search? |
@@ -95,23 +67,6 @@ module SearchHelper | @@ -95,23 +67,6 @@ module SearchHelper | ||
95 | end | 67 | end |
96 | end | 68 | end |
97 | 69 | ||
98 | - def facet_javascript(input_id, facet, array) | ||
99 | - array = [] if array.nil? | ||
100 | - hintText = _('Type in an option') | ||
101 | - text_field_tag('facet['+input_id+']', '', :id => input_id) + | ||
102 | - javascript_tag("jQuery.TokenList(jQuery('##{input_id}'), #{array.to_json}, | ||
103 | - {searchDelay: 0, permanentDropdown: true, theme: 'facet', dontAdd: true, preventDuplicates: true, | ||
104 | - #{jquery_token_input_messages_json(hintText)}});") | ||
105 | - end | ||
106 | - | ||
107 | - def asset_class(asset) | ||
108 | - asset.to_s.singularize.camelize.constantize | ||
109 | - end | ||
110 | - | ||
111 | - def asset_table(asset) | ||
112 | - asset_class(asset).table_name | ||
113 | - end | ||
114 | - | ||
115 | def display_filter(asset, display, float = 'right') | 70 | def display_filter(asset, display, float = 'right') |
116 | if map_capable?(asset) | 71 | if map_capable?(asset) |
117 | list_link = display == 'list' ? _('List') : link_to(_('List'), params.merge(:display => 'list')) | 72 | list_link = display == 'list' ? _('List') : link_to(_('List'), params.merge(:display => 'list')) |
app/models/article.rb
@@ -2,12 +2,6 @@ require 'hpricot' | @@ -2,12 +2,6 @@ require 'hpricot' | ||
2 | 2 | ||
3 | class Article < ActiveRecord::Base | 3 | class Article < ActiveRecord::Base |
4 | 4 | ||
5 | - # use for internationalizable human type names in search facets | ||
6 | - # reimplement on subclasses | ||
7 | - def self.type_name | ||
8 | - _('Content') | ||
9 | - end | ||
10 | - | ||
11 | track_actions :create_article, :after_create, :keep_params => [:name, :url, :lead, :first_image], :if => Proc.new { |a| a.is_trackable? && !a.image? } | 5 | track_actions :create_article, :after_create, :keep_params => [:name, :url, :lead, :first_image], :if => Proc.new { |a| a.is_trackable? && !a.image? } |
12 | 6 | ||
13 | # xss_terminate plugin can't sanitize array fields | 7 | # xss_terminate plugin can't sanitize array fields |
app/models/environment.rb
@@ -266,8 +266,6 @@ class Environment < ActiveRecord::Base | @@ -266,8 +266,6 @@ class Environment < ActiveRecord::Base | ||
266 | 266 | ||
267 | settings_items :search_hints, :type => Hash, :default => {} | 267 | settings_items :search_hints, :type => Hash, :default => {} |
268 | 268 | ||
269 | - settings_items :top_level_category_as_facet_ids, :type => Array, :default => [] | ||
270 | - | ||
271 | def news_amount_by_folder=(amount) | 269 | def news_amount_by_folder=(amount) |
272 | settings[:news_amount_by_folder] = amount.to_i | 270 | settings[:news_amount_by_folder] = amount.to_i |
273 | end | 271 | end |
app/models/profile.rb
@@ -3,12 +3,6 @@ | @@ -3,12 +3,6 @@ | ||
3 | # which by default is the one returned by Environment:default. | 3 | # which by default is the one returned by Environment:default. |
4 | class Profile < ActiveRecord::Base | 4 | class Profile < ActiveRecord::Base |
5 | 5 | ||
6 | - # use for internationalizable human type names in search facets | ||
7 | - # reimplement on subclasses | ||
8 | - def self.type_name | ||
9 | - _('Profile') | ||
10 | - end | ||
11 | - | ||
12 | module Roles | 6 | module Roles |
13 | def self.admin(env_id) | 7 | def self.admin(env_id) |
14 | find_role('admin', env_id) | 8 | find_role('admin', env_id) |
app/views/search/_facets_unselect_menu.rhtml
app/views/search/_search_form.rhtml
@@ -1,37 +0,0 @@ | @@ -1,37 +0,0 @@ | ||
1 | -<div class='search-form'> | ||
2 | - | ||
3 | - <% form_tag( { :controller => 'search', :action => @asset ? @asset : 'index', :asset => nil, :category_path => ( @category ? @category.explode_path : [] ) }, | ||
4 | - :method => 'get', :class => 'search_form' ) do %> | ||
5 | - | ||
6 | - <%= hidden_field_tag :display, params[:display] %> | ||
7 | - | ||
8 | - <% params_uri = CGI::unescape(request.request_uri) %> | ||
9 | - <% if params_uri.index('?') %> | ||
10 | - <% params_uri[(params_uri.index('?')+1)..-1].to_s.split("&").each do |part| %> | ||
11 | - <% if part.start_with? "facet" %> | ||
12 | - <% name_value = part.split("=") %> | ||
13 | - <%= hidden_field_tag name_value[0], name_value[1] %> | ||
14 | - <% end %> | ||
15 | - <% end %> | ||
16 | - <% end %> | ||
17 | - | ||
18 | - <div class="search-field"> | ||
19 | - <span class="formfield"> | ||
20 | - <%= text_field_tag 'query', @query, :id => 'search-input', :size => 50 %> | ||
21 | - <%= javascript_tag "jQuery('#search-input').attr('title', \"#{hint}\").hint()" if defined?(hint) %> | ||
22 | - </span> | ||
23 | - | ||
24 | - <%= submit_button(:search, _('Search')) %> | ||
25 | - </div> | ||
26 | - | ||
27 | - <% end %> | ||
28 | - | ||
29 | - <% if @empty_query %> | ||
30 | - <% hint = environment.search_hints[@asset] %> | ||
31 | - <% if hint and !hint.blank? %> | ||
32 | - <div class="search-hint"><%= hint %></div> | ||
33 | - <% end %> | ||
34 | - <% end %> | ||
35 | - | ||
36 | - <div style="clear: both"></div> | ||
37 | -</div> |
app/views/search/category_index.rhtml
app/views/search/facets_browse.rhtml
@@ -1,8 +0,0 @@ | @@ -1,8 +0,0 @@ | ||
1 | -<% results = @asset_class.map_facet_results(@facet, params[:facet], @facets, @all_facets) %> | ||
2 | - | ||
3 | -<% array = [] %> | ||
4 | -<% @asset_class.facet_result_sort(@facet, results, :alphabetically).each do |id, label, count| %> | ||
5 | - <% array << {:id => id, :name => facet_link_html(@facet, params.merge(:controller => 'search', :action => @asset), id, label, count)} %> | ||
6 | -<% end %> | ||
7 | - | ||
8 | -<%= facet_javascript('facet-input-'+@facet[:id].to_s, @facet, array) %> |
app/views/search/index.rhtml
@@ -1,29 +0,0 @@ | @@ -1,29 +0,0 @@ | ||
1 | -<div id="search-page" class="<%= "view-category" if @category %>"> | ||
2 | - | ||
3 | - <% if @category %> | ||
4 | - <div id="category-image"><%= image_tag(@category.image.public_filename(:thumb), :id => 'category-image') if @category.image %></div> | ||
5 | - <% end %> | ||
6 | - | ||
7 | - <%= search_page_title(_('Search Results'), @category) %> | ||
8 | - <%= render :partial => 'search_form', :locals => { :hint => '' } %> | ||
9 | - <%= category_context(@category, params) %> | ||
10 | - <%= display_results(@asset) %> | ||
11 | - | ||
12 | - <div id="category-childs"> | ||
13 | - <% if @category %> | ||
14 | - <h2> <%= _('Sub-categories') %> </h2> | ||
15 | - <% if @category.children.empty? %> | ||
16 | - <strong id="cat-no-child"><%= _('No sub-categories') %></strong> | ||
17 | - <% else %> | ||
18 | - <ul> | ||
19 | - <% @category.children.each do |c| %> | ||
20 | - <li> <%= link_to_category c, false %> </li> | ||
21 | - <% end %> | ||
22 | - </ul> | ||
23 | - <% end %> | ||
24 | - <% end %> | ||
25 | - </div> | ||
26 | - | ||
27 | -</div> | ||
28 | - | ||
29 | -<div style="clear: both"></div> |
plugins/solr/lib/ext/article.rb
@@ -2,6 +2,12 @@ require_dependency 'article' | @@ -2,6 +2,12 @@ require_dependency 'article' | ||
2 | 2 | ||
3 | class Article | 3 | class Article |
4 | 4 | ||
5 | + # use for internationalizable human type names in search facets | ||
6 | + # reimplement on subclasses | ||
7 | + def self.type_name | ||
8 | + _('Content') | ||
9 | + end | ||
10 | + | ||
5 | acts_as_faceted :fields => { | 11 | acts_as_faceted :fields => { |
6 | :solr_plugin_f_type => {:label => _('Type'), :proc => proc{|klass| solr_plugin_f_type_proc(klass)}}, | 12 | :solr_plugin_f_type => {:label => _('Type'), :proc => proc{|klass| solr_plugin_f_type_proc(klass)}}, |
7 | :solr_plugin_f_published_at => {:type => :date, :label => _('Published date'), :queries => {'[* TO NOW-1YEARS/DAY]' => _("Older than one year"), | 13 | :solr_plugin_f_published_at => {:type => :date, :label => _('Published date'), :queries => {'[* TO NOW-1YEARS/DAY]' => _("Older than one year"), |
plugins/solr/lib/ext/profile.rb
1 | require_dependency 'profile' | 1 | require_dependency 'profile' |
2 | 2 | ||
3 | class Profile | 3 | class Profile |
4 | + | ||
5 | + # use for internationalizable human type names in search facets | ||
6 | + # reimplement on subclasses | ||
7 | + def self.type_name | ||
8 | + _('Profile') | ||
9 | + end | ||
10 | + | ||
4 | after_save_reindex [:articles], :with => :delayed_job | 11 | after_save_reindex [:articles], :with => :delayed_job |
5 | 12 | ||
6 | acts_as_faceted :fields => { | 13 | acts_as_faceted :fields => { |
@@ -57,7 +64,7 @@ class Profile | @@ -57,7 +64,7 @@ class Profile | ||
57 | private | 64 | private |
58 | 65 | ||
59 | def self.solr_plugin_f_categories_label_proc(environment) | 66 | def self.solr_plugin_f_categories_label_proc(environment) |
60 | - ids = environment.top_level_category_as_facet_ids | 67 | + ids = environment.solr_plugin_top_level_category_as_facet_ids |
61 | r = Category.find(ids) | 68 | r = Category.find(ids) |
62 | map = {} | 69 | map = {} |
63 | ids.map{ |id| map[id.to_s] = r.detect{|c| c.id == id}.name } | 70 | ids.map{ |id| map[id.to_s] = r.detect{|c| c.id == id}.name } |
plugins/solr/lib/solr_plugin.rb
@@ -19,6 +19,7 @@ class SolrPlugin < Noosfero::Plugin | @@ -19,6 +19,7 @@ class SolrPlugin < Noosfero::Plugin | ||
19 | def full_text_search(asset, query, category, paginate_options) | 19 | def full_text_search(asset, query, category, paginate_options) |
20 | asset_class = asset_class(asset) | 20 | asset_class = asset_class(asset) |
21 | solr_options = solr_options(asset, category) | 21 | solr_options = solr_options(asset, category) |
22 | + solr_options.merge!(products_options(context.send(:user))) if asset == :products && empty_query?(query, category) | ||
22 | asset_class.find_by_contents(query, paginate_options, solr_options) | 23 | asset_class.find_by_contents(query, paginate_options, solr_options) |
23 | end | 24 | end |
24 | 25 |
plugins/solr/lib/solr_plugin/results_helper.rb
@@ -109,5 +109,14 @@ class SolrPlugin < Noosfero::Plugin | @@ -109,5 +109,14 @@ class SolrPlugin < Noosfero::Plugin | ||
109 | (count > 0 ? content_tag('span', " (#{count})", :class => 'facet-result-count') : ''), | 109 | (count > 0 ? content_tag('span', " (#{count})", :class => 'facet-result-count') : ''), |
110 | :class => 'facet-menu-item' + (selected ? ' facet-result-link-selected' : '') | 110 | :class => 'facet-menu-item' + (selected ? ' facet-result-link-selected' : '') |
111 | end | 111 | end |
112 | + | ||
113 | + def facet_javascript(input_id, facet, array) | ||
114 | + array = [] if array.nil? | ||
115 | + hintText = _('Type in an option') | ||
116 | + text_field_tag('facet['+input_id+']', '', :id => input_id) + | ||
117 | + javascript_tag("jQuery.TokenList(jQuery('##{input_id}'), #{array.to_json}, | ||
118 | + {searchDelay: 0, permanentDropdown: true, theme: 'facet', dontAdd: true, preventDuplicates: true, | ||
119 | + #{jquery_token_input_messages_json(hintText)}});") | ||
120 | + end | ||
112 | end | 121 | end |
113 | end | 122 | end |
plugins/solr/lib/solr_plugin/search_helper.rb
1 | class SolrPlugin < Noosfero::Plugin | 1 | class SolrPlugin < Noosfero::Plugin |
2 | 2 | ||
3 | + LIST_SEARCH_LIMIT = 20 | ||
4 | + DistFilt = 200 | ||
5 | + DistBoost = 50 | ||
6 | + | ||
3 | SortOptions = { | 7 | SortOptions = { |
4 | :products => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, | 8 | :products => ActiveSupport::OrderedHash[ :none, {:label => _('Relevance')}, |
5 | :more_recent, {:label => _('More recent'), :solr_opts => {:sort => 'updated_at desc, score desc'}}, | 9 | :more_recent, {:label => _('More recent'), :solr_opts => {:sort => 'updated_at desc, score desc'}}, |
@@ -54,6 +58,10 @@ class SolrPlugin < Noosfero::Plugin | @@ -54,6 +58,10 @@ class SolrPlugin < Noosfero::Plugin | ||
54 | context.params[:action] == 'index' | 58 | context.params[:action] == 'index' |
55 | end | 59 | end |
56 | 60 | ||
61 | + def empty_query?(query, category) | ||
62 | + category.nil? && query.blank? | ||
63 | + end | ||
64 | + | ||
57 | def solr_options(asset, category) | 65 | def solr_options(asset, category) |
58 | asset_class = asset_class(asset) | 66 | asset_class = asset_class(asset) |
59 | solr_options = {} | 67 | solr_options = {} |
@@ -79,5 +87,20 @@ class SolrPlugin < Noosfero::Plugin | @@ -79,5 +87,20 @@ class SolrPlugin < Noosfero::Plugin | ||
79 | end | 87 | end |
80 | solr_options | 88 | solr_options |
81 | end | 89 | end |
90 | + | ||
91 | + def products_options(person) | ||
92 | + geosearch = person && person.lat && person.lng | ||
93 | + | ||
94 | + extra_limit = LIST_SEARCH_LIMIT*5 | ||
95 | + sql_options = {:limit => LIST_SEARCH_LIMIT, :order => 'random()'} | ||
96 | + if geosearch | ||
97 | + {:sql_options => sql_options, :extra_limit => extra_limit, | ||
98 | + :alternate_query => "{!boost b=recip(geodist(),#{"%e" % (1.to_f/DistBoost)},1,1)}", | ||
99 | + :radius => DistFilt, :latitude => person.lat, :longitude => person.lng} | ||
100 | + else | ||
101 | + { :sql_options => sql_options, :extra_limit => extra_limit, | ||
102 | + :boost_functions => ['recip(ms(NOW/HOUR,updated_at),1.3e-10,1,1)']} | ||
103 | + end | ||
104 | + end | ||
82 | end | 105 | end |
83 | end | 106 | end |