Commit f1ba1f6fd436dc7cf349014b4d2fd4c22514556e
1 parent
9f9de166
Exists in
master
and in
29 other branches
Fixing pg search and like search details
Showing
6 changed files
with
22 additions
and
53 deletions
Show diff stats
app/controllers/application_controller.rb
@@ -165,7 +165,7 @@ class ApplicationController < ActionController::Base | @@ -165,7 +165,7 @@ class ApplicationController < ActionController::Base | ||
165 | 165 | ||
166 | def fallback_find_by_contents(asset, scope, query, paginate_options, options) | 166 | def fallback_find_by_contents(asset, scope, query, paginate_options, options) |
167 | return {:results => scope.paginate(paginate_options)} if query.blank? | 167 | return {:results => scope.paginate(paginate_options)} if query.blank? |
168 | - {:results => scope.like_search(conditions).paginate(paginate_options)} | 168 | + {:results => scope.like_search(query).paginate(paginate_options)} |
169 | end | 169 | end |
170 | 170 | ||
171 | end | 171 | end |
plugins/pg_search/db/migrate/20130320010051_create_indexes_for_search.rb
@@ -1,19 +0,0 @@ | @@ -1,19 +0,0 @@ | ||
1 | -class CreateIndexesForSearch < ActiveRecord::Migration | ||
2 | - def self.up | ||
3 | - searchables = %w[ article comment qualifier national_region certifier profile license scrap category ] | ||
4 | - klasses = searchables.map {|searchable| searchable.camelize.constantize } | ||
5 | - klasses.each do |klass| | ||
6 | - klass::SEARCHABLE_FIELDS.keys.each do |field| | ||
7 | - execute "create index pg_search_plugin_#{klass.name.singularize.downcase}_#{field} on #{klass.table_name} using gin(to_tsvector('simple', #{field}))" | ||
8 | - end | ||
9 | - end | ||
10 | - end | ||
11 | - | ||
12 | - def self.down | ||
13 | - klasses.each do |klass| | ||
14 | - klass::SEARCHABLE_FIELDS.keys.each do |field| | ||
15 | - execute "drop index pg_search_plugin_#{klass.name.singularize.downcase}_#{field}" | ||
16 | - end | ||
17 | - end | ||
18 | - end | ||
19 | -end |
plugins/pg_search/db/migrate/20130320010053_create_indexes_for_search.rb
0 → 100644
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +class CreateIndexesForSearch < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + searchables = %w[ article comment qualifier national_region certifier profile license scrap category ] | ||
4 | + klasses = searchables.map {|searchable| searchable.camelize.constantize } | ||
5 | + klasses.each do |klass| | ||
6 | + klass::SEARCHABLE_FIELDS.keys.each do |field| | ||
7 | + execute "create index pg_search_plugin_#{klass.name.singularize.downcase}_#{field} on #{klass.table_name} using gin(to_tsvector('simple', \"#{klass.table_name}\".#{field}))" | ||
8 | + end | ||
9 | + end | ||
10 | + end | ||
11 | + | ||
12 | + def self.down | ||
13 | + klasses.each do |klass| | ||
14 | + klass::SEARCHABLE_FIELDS.keys.each do |field| | ||
15 | + execute "drop index pg_search_plugin_#{klass.name.singularize.downcase}_#{field}" | ||
16 | + end | ||
17 | + end | ||
18 | + end | ||
19 | +end |
plugins/pg_search/lib/ext/active_record.rb
@@ -3,7 +3,7 @@ require_dependency 'active_record' | @@ -3,7 +3,7 @@ require_dependency 'active_record' | ||
3 | class ActiveRecord::Base | 3 | class ActiveRecord::Base |
4 | def self.pg_search_plugin_search(query) | 4 | def self.pg_search_plugin_search(query) |
5 | if defined?(self::SEARCHABLE_FIELDS) | 5 | if defined?(self::SEARCHABLE_FIELDS) |
6 | - conditions = self::SEARCHABLE_FIELDS.map {|field, weight| "to_tsvector('simple', #{field}) @@ '#{query}'"}.join(' OR ') | 6 | + conditions = self::SEARCHABLE_FIELDS.map {|field, weight| "to_tsvector('simple', \"#{self.table_name}\".#{field}) @@ '#{query}'"}.join(' OR ') |
7 | where(conditions) | 7 | where(conditions) |
8 | else | 8 | else |
9 | raise "No searchable fields defined for #{self.name}" | 9 | raise "No searchable fields defined for #{self.name}" |
plugins/pg_search/lib/pg_search_plugin.rb
@@ -11,6 +11,7 @@ class PgSearchPlugin < Noosfero::Plugin | @@ -11,6 +11,7 @@ class PgSearchPlugin < Noosfero::Plugin | ||
11 | end | 11 | end |
12 | 12 | ||
13 | def find_by_contents(asset, scope, query, paginate_options={}, options={}) | 13 | def find_by_contents(asset, scope, query, paginate_options={}, options={}) |
14 | + return if query.blank? | ||
14 | {:results => scope.pg_search_plugin_search(query).paginate(paginate_options)} | 15 | {:results => scope.pg_search_plugin_search(query).paginate(paginate_options)} |
15 | end | 16 | end |
16 | 17 |
plugins/pg_search/test/integration/performance_test.rb
@@ -1,32 +0,0 @@ | @@ -1,32 +0,0 @@ | ||
1 | -require 'test_helper' | ||
2 | -require 'benchmark' | ||
3 | - | ||
4 | -class PerformanceTest < ActionController::IntegrationTest | ||
5 | - | ||
6 | - searchables = %w[ article comment qualifier national_region certifier profile license scrap category ] | ||
7 | - quantities = [10, 100, 1000] | ||
8 | - | ||
9 | - searchables.each do |searchable| | ||
10 | - self.send(:define_method, "test_#{searchable}_performance") do | ||
11 | - klass = searchable.camelize.constantize | ||
12 | - asset = searchable.pluralize.to_sym | ||
13 | - quantities.each do |quantity| | ||
14 | - create(klass, quantity) | ||
15 | - get 'index' | ||
16 | - like = Benchmark.measure { 10.times { @controller.send(:find_by_contents, asset, klass, searchable) } } | ||
17 | - puts "Like for #{quantity}: #{like}" | ||
18 | - Environment.default.enable_plugin(PgSearchPlugin) | ||
19 | - get 'index' | ||
20 | - like = Benchmark.measure { 10.times { @controller.send(:find_by_contents, asset, klass, searchable) } } | ||
21 | - puts "Pg for #{quantity}: #{pg}" | ||
22 | - end | ||
23 | - end | ||
24 | - end | ||
25 | - | ||
26 | - private | ||
27 | - | ||
28 | - def create(klass, quantity) | ||
29 | - klass.destroy_all | ||
30 | - quantity.times.each {fast_create(klass)} | ||
31 | - end | ||
32 | -end |