Author: Braulio Bhavamitra <braulio@prout.io>
solr: fix searches
plugins/solr/lib/ext/article.rb | 4 ++-- plugins/solr/lib/ext/products_plugin/product.rb | 4 ++-- plugins/solr/lib/ext/profile.rb | 4 ++-- plugins/solr/lib/solr_plugin/base.rb | 9 ++++++--- plugins/solr/lib/solr_plugin/search_helper.rb | 6 +++--- plugins/solr/test/unit/article_test.rb | 4 ++-- plugins/solr/test/unit/product_test.rb | 4 ++-- plugins/solr/test/unit/profile_test.rb | 4 ++-- plugins/solr/test/unit/solr_plugin/plugin_test.rb | 2 +-
diff --git a/plugins/solr/lib/ext/article.rb b/plugins/solr/lib/ext/article.rb index 516e3cbc6955071530ee34237ca6307a9fba80ba..c75aa084a3285e6da1c1044af819420f8f01e1b6 100644 --- a/plugins/solr/lib/ext/article.rb +++ b/plugins/solr/lib/ext/article.rb @@ -58,7 +58,7 @@ def solr_f_category self.categories.collect(&:name) end - def solr_public + def solr_is_public self.public? end @@ -89,7 +89,7 @@ {name: {type: :text, boost: 2.0}}, {slug: :text}, {body: :text}, {abstract: :text}, {filename: :text}, # filtered fields - {solr_public: :boolean}, {published: :boolean}, + {solr_is_public: :boolean}, {published: :boolean}, {environment_id: :integer}, {profile_id: :integer}, :language, {solr_category_filter: :integer}, diff --git a/plugins/solr/lib/ext/products_plugin/product.rb b/plugins/solr/lib/ext/products_plugin/product.rb index fd290c982ae038f3ddff6199cc613868ab827a49..3aa2bb070d8d3219f4af2da199f57af6633bdf46 100644 --- a/plugins/solr/lib/ext/products_plugin/product.rb +++ b/plugins/solr/lib/ext/products_plugin/product.rb @@ -78,7 +78,7 @@ def solr_category_filter enterprise.categories_including_virtual_ids << product_category_id end - def solr_public + def solr_is_public # environment.products only consider enterprises self.public? and self.profile.enterprise? end @@ -132,7 +132,7 @@ {name: {type: :text, boost: 2.0}}, {solr_supplier: {type: :text}}, {description: :text}, {category_full_name: :text}, # filtered fields - {solr_public: :boolean}, + {solr_is_public: :boolean}, {environment_id: :integer}, {profile_id: :integer}, {enabled: :boolean}, {solr_category_filter: :integer}, {available: :boolean}, {archived: :boolean}, {highlighted: :boolean}, diff --git a/plugins/solr/lib/ext/profile.rb b/plugins/solr/lib/ext/profile.rb index 2863c74deaa0ccb2e4ce3a6f28dd34dc940f7d1a..60e000605008abc939598396ed62516ca9904f3a 100644 --- a/plugins/solr/lib/ext/profile.rb +++ b/plugins/solr/lib/ext/profile.rb @@ -116,7 +116,7 @@ def solr_f_enabled self.enabled end - def solr_public + def solr_is_public self.public? end @@ -167,7 +167,7 @@ # searched fields {name: {type: :text, boost: 2.0}}, {nickname: :text}, {display_name: :text}, {identifier: :text}, {contact_email: :text}, # filtered fields - {solr_public: :boolean}, {environment_id: :integer}, + {solr_is_public: :boolean}, {environment_id: :integer}, {solr_category_filter: :integer}, # scopes {no_templates: :boolean}, diff --git a/plugins/solr/lib/solr_plugin/base.rb b/plugins/solr/lib/solr_plugin/base.rb index 6320121882723ca58c35bbda5d2b9bddd9e38279..255de877d2d1fc107f293c33a387b15ff53d438f 100644 --- a/plugins/solr/lib/solr_plugin/base.rb +++ b/plugins/solr/lib/solr_plugin/base.rb @@ -151,8 +151,9 @@ solr_fields = klass.configuration[:solr_fields].keys rescue [] scopes_applied = scope.scopes_applied.dup rescue [] #rescue association and class direct filtering scope.scope_attributes.each do |attr, value| - next if attr == 'type' - raise "Non-indexed attribute '#{attr}' speficied in scope_attributes" unless solr_fields.include? attr.to_sym + next if attr.to_sym == :type + + raise "#{klass.name}: non-indexed attribute '#{attr}' speficied in scope_attributes" unless solr_fields.include? attr.to_sym # if the filter is present here, then prefer it scopes_applied.reject!{ |name| name == attr.to_sym } @@ -162,6 +163,8 @@ end scopes_applied.each do |name| #next if name.to_s == options[:filter].to_s + # not yet supported as it involves ordering + next if name.to_s.in? klass::SEARCH_FILTERS[:order] has_value = name === Hash if has_value @@ -180,7 +183,7 @@ else filter_queries << klass.send("solr_filter_#{name}", *args) end else - raise "Undeclared solr field for scope '#{name}'" if related_field.nil? + raise "#{klass.name}: undeclared solr field for scope '#{name}'" if related_field.nil? if related_field filter_queries << "#{related_field}:true" end diff --git a/plugins/solr/lib/solr_plugin/search_helper.rb b/plugins/solr/lib/solr_plugin/search_helper.rb index 120126e8d14ab712c914e6eeaefd1f641d664d6a..53d4e1c68e2509ffe2dca5f88e4f3f99eb534aaf 100644 --- a/plugins/solr/lib/solr_plugin/search_helper.rb +++ b/plugins/solr/lib/solr_plugin/search_helper.rb @@ -70,13 +70,13 @@ def solr_filters_queries asset, environment case asset when :products - ['solr_public:true', 'enabled:true'] + ['solr_is_public:true', 'enabled:true'] when :catalog, :events, :categories, :product_categories [] when :profiles, :people, :organizations, :communities, :enterprises - ['solr_public:true', 'environment_id:%s' % environment.id] + ['solr_is_public:true', 'environment_id:%s' % environment.id] else - ['solr_public:true'] + ['solr_is_public:true'] end end diff --git a/plugins/solr/test/unit/article_test.rb b/plugins/solr/test/unit/article_test.rb index 5b68f0e9df5476e903b2cdaabe7035f7fd94e5bc..bd784b3d19f20f52946ea038d97f607bd125ffe1 100644 --- a/plugins/solr/test/unit/article_test.rb +++ b/plugins/solr/test/unit/article_test.rb @@ -43,8 +43,8 @@ assert_includes Article.find_by_contents('mosquitos')[:results].docs, a assert_includes Article.find_by_contents('beer')[:results].docs, a assert_includes Article.find_by_contents('not_a_virus.exe')[:results].docs, a # filters - assert_includes Article.find_by_contents('bananas', {}, {:filter_queries => ["solr_public:true"]})[:results].docs, a - assert_not_includes Article.find_by_contents('bananas', {}, {:filter_queries => ["solr_public:false"]})[:results].docs, a + assert_includes Article.find_by_contents('bananas', {}, {:filter_queries => ["solr_is_public:true"]})[:results].docs, a + assert_not_includes Article.find_by_contents('bananas', {}, {:filter_queries => ["solr_is_public:false"]})[:results].docs, a assert_includes Article.find_by_contents('bananas', {}, {:filter_queries => ["environment_id:\"#{Environment.default.id}\""]})[:results].docs, a assert_includes Article.find_by_contents('bananas', {}, {:filter_queries => ["profile_id:\"#{person.id}\""]})[:results].docs, a # includes diff --git a/plugins/solr/test/unit/product_test.rb b/plugins/solr/test/unit/product_test.rb index 0ad05cc6a9a9060bfccd0e8dc09b7117fcb49162..a0cf92d9cdd30e3ce19530440a4d4a345ba3de7a 100644 --- a/plugins/solr/test/unit/product_test.rb +++ b/plugins/solr/test/unit/product_test.rb @@ -57,8 +57,8 @@ assert_includes Product.find_by_contents('bananas')[:results].docs, p assert_includes Product.find_by_contents('mosquitos')[:results].docs, p assert_includes Product.find_by_contents('homemade')[:results].docs, p # filters - assert_includes Product.find_by_contents('bananas', {}, { :filter_queries => ["solr_public:true"]})[:results].docs, p - assert_not_includes Product.find_by_contents('bananas', {}, { :filter_queries => ["solr_public:false"]})[:results].docs, p + assert_includes Product.find_by_contents('bananas', {}, { :filter_queries => ["solr_is_public:true"]})[:results].docs, p + assert_not_includes Product.find_by_contents('bananas', {}, { :filter_queries => ["solr_is_public:false"]})[:results].docs, p assert_includes Product.find_by_contents('bananas', {}, { :filter_queries => ["environment_id:\"#{Environment.default.id}\""]})[:results].docs, p # includes assert_includes Product.find_by_contents("homemade")[:results].docs, p diff --git a/plugins/solr/test/unit/profile_test.rb b/plugins/solr/test/unit/profile_test.rb index bdb601a0b011f0210068f32e90af7ec14609c8dc..ad8fd131973e39330f70ea17cee9d49990b43639 100644 --- a/plugins/solr/test/unit/profile_test.rb +++ b/plugins/solr/test/unit/profile_test.rb @@ -41,8 +41,8 @@ # fields assert_includes Profile.find_by_contents('Hiro')[:results].docs, p assert_includes Profile.find_by_contents('Protagonist')[:results].docs, p # filters - assert_includes Profile.find_by_contents('Hiro', {}, { :filter_queries => ["solr_public:true"]})[:results].docs, p - assert_not_includes Profile.find_by_contents('Hiro', {}, { :filter_queries => ["solr_public:false"]})[:results].docs, p + assert_includes Profile.find_by_contents('Hiro', {}, { :filter_queries => ["solr_is_public:true"]})[:results].docs, p + assert_not_includes Profile.find_by_contents('Hiro', {}, { :filter_queries => ["solr_is_public:false"]})[:results].docs, p assert_includes Profile.find_by_contents('Hiro', {}, { :filter_queries => ["environment_id:\"#{Environment.default.id}\""]})[:results].docs, p # includes assert_includes Profile.find_by_contents("Inglewood")[:results].docs, p diff --git a/plugins/solr/test/unit/solr_plugin/plugin_test.rb b/plugins/solr/test/unit/solr_plugin/plugin_test.rb index 8b82ddcc5e2d48e47ecf76d5dd582b884517a171..0733198c016e1523848ad1310710fe2356a3ccc0 100644 --- a/plugins/solr/test/unit/solr_plugin/plugin_test.rb +++ b/plugins/solr/test/unit/solr_plugin/plugin_test.rb @@ -10,7 +10,7 @@ should 'convert scopes to solr filters' do person = create_user('test').person result = plugin.send :scopes_to_solr_filters, person.files.public.published - assert_equal result, ["profile_id:#{person.id}", "published:'true'", "solr_public:true"] + assert_equal result, ["profile_id:#{person.id}", "published:'true'", "solr_is_public:true"] end end