mongoid_fulltext 0.5.4 → 0.5.5
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/README.md +6 -0
- data/VERSION +1 -1
- data/lib/mongoid_fulltext.rb +9 -3
- data/mongoid_fulltext.gemspec +2 -2
- metadata +13 -13
data/README.md
CHANGED
@@ -4,6 +4,12 @@ Mongoid Fulltext Search
|
|
4
4
|
Full-text search using n-gram matching for the Mongoid ODM. Tested on MongoDB 1.6 and above, but
|
5
5
|
probably works on earlier versions as well.
|
6
6
|
|
7
|
+
MongoDB currently has no native full-text search capabilities, so this gem is a good fit for cases
|
8
|
+
where you want something a little less than a full-blown indexing service like Solr. mongoid_fulltext
|
9
|
+
lets you do a fuzzy string search across relatively short strings, which makes it good for populating
|
10
|
+
autocomplete boxes based on the display names of your Rails models but not appropriate for, say,
|
11
|
+
indexing hundreds of thousands of HTML documents.
|
12
|
+
|
7
13
|
Some examples:
|
8
14
|
--------------
|
9
15
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.5
|
data/lib/mongoid_fulltext.rb
CHANGED
@@ -24,7 +24,7 @@ module Mongoid::FullTextSearch
|
|
24
24
|
|
25
25
|
config = {
|
26
26
|
:alphabet => 'abcdefghijklmnopqrstuvwxyz0123456789 ',
|
27
|
-
:word_separators =>
|
27
|
+
:word_separators => "- \n\t",
|
28
28
|
:ngram_width => 3,
|
29
29
|
:max_ngrams_to_search => 6,
|
30
30
|
:apply_prefix_scoring_to_all_words => true,
|
@@ -219,11 +219,17 @@ module Mongoid::FullTextSearch
|
|
219
219
|
|
220
220
|
# If an ngram appears multiple times in the query string, keep the max score
|
221
221
|
ngram_array = ngram_array.group_by{ |h| h[:ngram] }.map{ |key, values| {:ngram => key, :score => values.map{ |v| v[:score] }.max} }
|
222
|
+
|
223
|
+
if config[:index_short_prefixes] or config[:index_full_words]
|
224
|
+
split_regex_def = config[:word_separators].keys.map{ |k| Regexp.escape(k) }.join
|
225
|
+
split_regex = Regexp.compile("[#{split_regex_def}]")
|
226
|
+
all_words = filtered_str.split(split_regex)
|
227
|
+
end
|
222
228
|
|
223
229
|
# Add 'short prefix' records to the array: prefixes of the string that are length (ngram_width - 1)
|
224
230
|
if config[:index_short_prefixes]
|
225
231
|
prefixes_seen = {}
|
226
|
-
|
232
|
+
all_words.each do |word|
|
227
233
|
next if word.length < config[:ngram_width]-1
|
228
234
|
prefix = word[0...config[:ngram_width]-1]
|
229
235
|
if prefixes_seen[prefix].nil? and (config[:stop_words][word].nil? or word == filtered_str)
|
@@ -236,7 +242,7 @@ module Mongoid::FullTextSearch
|
|
236
242
|
# Add records to the array of ngrams for each full word in the string that isn't a stop word
|
237
243
|
if config[:index_full_words]
|
238
244
|
full_words_seen = {}
|
239
|
-
|
245
|
+
all_words.each do |word|
|
240
246
|
if word.length > 1 and full_words_seen[word].nil? and (config[:stop_words][word].nil? or word == filtered_str)
|
241
247
|
ngram_array << {:ngram => word, :score => 1 + 1.0/filtered_str.length}
|
242
248
|
full_words_seen[word] = true
|
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.5.
|
8
|
+
s.version = "0.5.5"
|
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-
|
12
|
+
s.date = %q{2011-12-19}
|
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 = [
|
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.5.
|
4
|
+
version: 0.5.5
|
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-
|
12
|
+
date: 2011-12-19 00:00:00.000000000 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: unicode_utils
|
17
|
-
requirement: &
|
17
|
+
requirement: &74785740 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 1.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *74785740
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: mongoid
|
28
|
-
requirement: &
|
28
|
+
requirement: &74785500 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 2.0.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *74785500
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bson_ext
|
39
|
-
requirement: &
|
39
|
+
requirement: &74785260 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 1.3.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *74785260
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rspec
|
50
|
-
requirement: &
|
50
|
+
requirement: &74785020 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 2.5.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *74785020
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: jeweler
|
61
|
-
requirement: &
|
61
|
+
requirement: &74784780 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: 1.5.2
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *74784780
|
70
70
|
description: Full-text search for the Mongoid ORM, using n-grams extracted from text
|
71
71
|
email: aaron.windsor@gmail.com
|
72
72
|
executables: []
|
@@ -120,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
120
|
version: '0'
|
121
121
|
segments:
|
122
122
|
- 0
|
123
|
-
hash:
|
123
|
+
hash: -329929775
|
124
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
125
|
none: false
|
126
126
|
requirements:
|