Commit 43c0f238754c1e2848a7fdee832e7f0006262937
1 parent
025c89ad
Exists in
master
and in
1 other branch
use full-text search for problem search
This necessitates a mongo dependency upgrade because full-text searching was not available until mongo2.4 and not considered production-ready until mongo2.6. But this drastically improves search performance as the database grows.
Showing
4 changed files
with
14 additions
and
9 deletions
Show diff stats
README.md
@@ -71,7 +71,7 @@ updates and notifications. | @@ -71,7 +71,7 @@ updates and notifications. | ||
71 | The list of requirements to install Errbit are: | 71 | The list of requirements to install Errbit are: |
72 | 72 | ||
73 | * Ruby 2.1.0 or higher | 73 | * Ruby 2.1.0 or higher |
74 | -* MongoDB 2.2.0 or higher | 74 | +* MongoDB 2.6.0 or higher |
75 | 75 | ||
76 | Installation | 76 | Installation |
77 | ------------ | 77 | ------------ |
@@ -188,6 +188,8 @@ When upgrading Errbit, please run: | @@ -188,6 +188,8 @@ When upgrading Errbit, please run: | ||
188 | git pull origin master # assuming origin is the github.com/errbit/errbit repo | 188 | git pull origin master # assuming origin is the github.com/errbit/errbit repo |
189 | bundle install | 189 | bundle install |
190 | rake db:migrate | 190 | rake db:migrate |
191 | +rake db:mongoid:create_indexes | ||
192 | +rake db:mongoid:remove_undefined_indexes | ||
191 | rake assets:precompile | 193 | rake assets:precompile |
192 | ``` | 194 | ``` |
193 | 195 |
app/models/problem.rb
@@ -42,6 +42,14 @@ class Problem | @@ -42,6 +42,14 @@ class Problem | ||
42 | index :resolved_at => 1 | 42 | index :resolved_at => 1 |
43 | index :notices_count => 1 | 43 | index :notices_count => 1 |
44 | 44 | ||
45 | + index({ | ||
46 | + error_class: "text", | ||
47 | + where: "text", | ||
48 | + message: "text", | ||
49 | + app_name: "text", | ||
50 | + environment: "text" | ||
51 | + }, default_language: "english") | ||
52 | + | ||
45 | belongs_to :app | 53 | belongs_to :app |
46 | has_many :errs, :inverse_of => :problem, :dependent => :destroy | 54 | has_many :errs, :inverse_of => :problem, :dependent => :destroy |
47 | has_many :comments, :inverse_of => :err, :dependent => :destroy | 55 | has_many :comments, :inverse_of => :err, :dependent => :destroy |
@@ -231,13 +239,7 @@ class Problem | @@ -231,13 +239,7 @@ class Problem | ||
231 | end | 239 | end |
232 | 240 | ||
233 | def self.search(value) | 241 | def self.search(value) |
234 | - any_of( | ||
235 | - {:error_class => /#{value}/i}, | ||
236 | - {:where => /#{value}/i}, | ||
237 | - {:message => /#{value}/i}, | ||
238 | - {:app_name => /#{value}/i}, | ||
239 | - {:environment => /#{value}/i} | ||
240 | - ) | 242 | + Problem.where({'$text' => {'$search' => value}}) |
241 | end | 243 | end |
242 | 244 | ||
243 | private | 245 | private |
spec/controllers/problems_controller_spec.rb
@@ -138,7 +138,7 @@ describe ProblemsController, type: 'controller' do | @@ -138,7 +138,7 @@ describe ProblemsController, type: 'controller' do | ||
138 | end | 138 | end |
139 | 139 | ||
140 | it "searches problems for given string" do | 140 | it "searches problems for given string" do |
141 | - get :search, :search => "Most important" | 141 | + get :search, :search => "\"Most important\"" |
142 | expect(controller.problems).to include(@problem1) | 142 | expect(controller.problems).to include(@problem1) |
143 | expect(controller.problems).to_not include(@problem2) | 143 | expect(controller.problems).to_not include(@problem2) |
144 | end | 144 | end |
spec/spec_helper.rb
@@ -39,6 +39,7 @@ RSpec.configure do |config| | @@ -39,6 +39,7 @@ RSpec.configure do |config| | ||
39 | 39 | ||
40 | config.before(:each) do | 40 | config.before(:each) do |
41 | Mongoid.default_client.database.collections.each(&:drop) | 41 | Mongoid.default_client.database.collections.each(&:drop) |
42 | + Mongoid::Tasks::Database.create_indexes | ||
42 | end | 43 | end |
43 | 44 | ||
44 | config.include Haml, type: :helper | 45 | config.include Haml, type: :helper |