mongoid_fulltext 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/mongoid_fulltext.rb +17 -6
- data/mongoid_fulltext.gemspec +2 -2
- data/spec/spec_helper.rb +1 -0
- metadata +11 -11
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
data/lib/mongoid_fulltext.rb
CHANGED
@@ -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
|
-
|
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.
|
71
|
-
coll.ensure_index(
|
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={})
|
data/mongoid_fulltext.gemspec
CHANGED
@@ -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.
|
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-
|
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 = [
|
data/spec/spec_helper.rb
CHANGED
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.
|
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-
|
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: &
|
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: *
|
25
|
+
version_requirements: *75050220
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: database_cleaner
|
28
|
-
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: *
|
36
|
+
version_requirements: *75049790
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
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: *
|
47
|
+
version_requirements: *75049460
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: jeweler
|
50
|
-
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: *
|
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:
|
107
|
+
hash: 871827713
|
108
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
109
|
none: false
|
110
110
|
requirements:
|