From 43c0f238754c1e2848a7fdee832e7f0006262937 Mon Sep 17 00:00:00 2001 From: Stephen Crosby Date: Thu, 23 Jul 2015 12:42:26 -0700 Subject: [PATCH] use full-text search for problem search --- README.md | 4 +++- app/models/problem.rb | 16 +++++++++------- spec/controllers/problems_controller_spec.rb | 2 +- spec/spec_helper.rb | 1 + 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index d2a52c0..83c0e13 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ updates and notifications. The list of requirements to install Errbit are: * Ruby 2.1.0 or higher -* MongoDB 2.2.0 or higher +* MongoDB 2.6.0 or higher Installation ------------ @@ -188,6 +188,8 @@ When upgrading Errbit, please run: git pull origin master # assuming origin is the github.com/errbit/errbit repo bundle install rake db:migrate +rake db:mongoid:create_indexes +rake db:mongoid:remove_undefined_indexes rake assets:precompile ``` diff --git a/app/models/problem.rb b/app/models/problem.rb index 991db04..99d8037 100644 --- a/app/models/problem.rb +++ b/app/models/problem.rb @@ -42,6 +42,14 @@ class Problem index :resolved_at => 1 index :notices_count => 1 + index({ + error_class: "text", + where: "text", + message: "text", + app_name: "text", + environment: "text" + }, default_language: "english") + belongs_to :app has_many :errs, :inverse_of => :problem, :dependent => :destroy has_many :comments, :inverse_of => :err, :dependent => :destroy @@ -231,13 +239,7 @@ class Problem end def self.search(value) - any_of( - {:error_class => /#{value}/i}, - {:where => /#{value}/i}, - {:message => /#{value}/i}, - {:app_name => /#{value}/i}, - {:environment => /#{value}/i} - ) + Problem.where({'$text' => {'$search' => value}}) end private diff --git a/spec/controllers/problems_controller_spec.rb b/spec/controllers/problems_controller_spec.rb index c1419ef..06bc965 100644 --- a/spec/controllers/problems_controller_spec.rb +++ b/spec/controllers/problems_controller_spec.rb @@ -138,7 +138,7 @@ describe ProblemsController, type: 'controller' do end it "searches problems for given string" do - get :search, :search => "Most important" + get :search, :search => "\"Most important\"" expect(controller.problems).to include(@problem1) expect(controller.problems).to_not include(@problem2) end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 364f60e..1510105 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -39,6 +39,7 @@ RSpec.configure do |config| config.before(:each) do Mongoid.default_client.database.collections.each(&:drop) + Mongoid::Tasks::Database.create_indexes end config.include Haml, type: :helper -- libgit2 0.21.2