mongoid_fulltext 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
@@ -46,29 +46,40 @@ module Mongoid::FullTextSearch
46
46
  db = collection.db
47
47
  coll = db.collection(index_name)
48
48
 
49
+ # The order of filters matters when the same index is used from two or more collections.
49
50
  filter_indexes = (config[:filters] || []).map do |key,value|
50
51
  ["filter_values.#{key}", Mongo::ASCENDING]
51
- end
52
+ end.sort_by { |filter_index| filter_index[0] }
53
+
52
54
  index_definition = [['ngram', Mongo::ASCENDING], ['score', Mongo::DESCENDING]].concat(filter_indexes)
53
55
 
54
56
  # Since the definition of the index could have changed, we'll clean up by
55
- # removing any indexes that aren't on the exact
57
+ # removing any indexes that aren't on the exact.
56
58
  correct_keys = index_definition.map{ |field_def| field_def[0] }
57
59
  all_filter_keys = filter_indexes.map{ |field_def| field_def[0] }
58
60
  coll.index_information.each do |name, definition|
59
61
  keys = definition['key'].keys
60
62
  next if !keys.member?('ngram')
61
63
  all_filter_keys |= keys.find_all{ |key| key.starts_with?('filter_values.') }
62
- coll.drop_index(name) if keys & correct_keys != correct_keys
64
+ if keys & correct_keys != correct_keys
65
+ fulltext_log "Droping #{name} [#{keys & correct_keys} <=> #{correct_keys}]"
66
+ coll.drop_index(name)
67
+ end
63
68
  end
64
69
 
65
70
  if all_filter_keys.length > filter_indexes.length
66
- filter_indexes = all_filter_keys.map { |key| [key, Mongo::ASCENDING] }
71
+ filter_indexes = all_filter_keys.map { |key| [key, Mongo::ASCENDING] }.sort_by { |filter_index| filter_index[0] }
67
72
  index_definition = [['ngram', Mongo::ASCENDING], ['score', Mongo::DESCENDING]].concat(filter_indexes)
68
73
  end
69
74
 
70
- coll.ensure_index(index_definition, name: 'fts_index')
71
- coll.ensure_index([['document_id', Mongo::ASCENDING]]) # to make removes fast
75
+ fulltext_log "Ensuring fts_index on #{coll.name}: #{index_definition}"
76
+ coll.ensure_index(index_definition, { :name => 'fts_index', :background => true })
77
+ fulltext_log "Ensuring document_id index on #{coll.name}"
78
+ coll.ensure_index([['document_id', Mongo::ASCENDING]], { :background => true }) # to make removes fast
79
+ end
80
+
81
+ def fulltext_log(message)
82
+ Mongoid.logger.info("[mongoid_fulltext] #{message}") if Mongoid.logger
72
83
  end
73
84
 
74
85
  def fulltext_search(query_string, options={})
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid_fulltext}
8
- s.version = "0.4.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aaron Windsor"]
12
- s.date = %q{2011-07-19}
12
+ s.date = %q{2011-07-27}
13
13
  s.description = %q{Full-text search for the Mongoid ORM, using n-grams extracted from text}
14
14
  s.email = %q{aaron.windsor@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -8,6 +8,7 @@ require 'database_cleaner'
8
8
  Mongoid.configure do |config|
9
9
  name = "mongoid_fulltext_test"
10
10
  config.master = Mongo::Connection.new.db(name)
11
+ config.logger = Logger.new('/dev/null')
11
12
  end
12
13
 
13
14
  require File.expand_path("../../lib/mongoid_fulltext", __FILE__)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_fulltext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-19 00:00:00.000000000 -04:00
12
+ date: 2011-07-27 00:00:00.000000000 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mongoid
17
- requirement: &70446910 !ruby/object:Gem::Requirement
17
+ requirement: &75050220 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 2.0.0
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70446910
25
+ version_requirements: *75050220
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: database_cleaner
28
- requirement: &70444760 !ruby/object:Gem::Requirement
28
+ requirement: &75049790 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.6.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70444760
36
+ version_requirements: *75049790
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &70397170 !ruby/object:Gem::Requirement
39
+ requirement: &75049460 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.5.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70397170
47
+ version_requirements: *75049460
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: jeweler
50
- requirement: &70386800 !ruby/object:Gem::Requirement
50
+ requirement: &75049090 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: 1.5.2
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70386800
58
+ version_requirements: *75049090
59
59
  description: Full-text search for the Mongoid ORM, using n-grams extracted from text
60
60
  email: aaron.windsor@gmail.com
61
61
  executables: []
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  segments:
106
106
  - 0
107
- hash: 858859311
107
+ hash: 871827713
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements: