sunspot 2.2.7 → 2.2.8
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/Appraisals +7 -0
- data/Gemfile +0 -8
- data/gemfiles/.gitkeep +0 -0
- data/lib/sunspot/dsl/scope.rb +6 -1
- data/lib/sunspot/field.rb +11 -0
- data/lib/sunspot/field_factory.rb +6 -2
- data/lib/sunspot/query/bbox.rb +5 -1
- data/lib/sunspot/query/restriction.rb +11 -0
- data/lib/sunspot/search/hit_enumerable.rb +4 -1
- data/lib/sunspot/search/standard_search.rb +2 -3
- data/lib/sunspot/version.rb +1 -1
- data/spec/api/adapters_spec.rb +19 -19
- data/spec/api/batcher_spec.rb +15 -15
- data/spec/api/binding_spec.rb +3 -3
- data/spec/api/class_set_spec.rb +3 -3
- data/spec/api/hit_enumerable_spec.rb +32 -9
- data/spec/api/indexer/attributes_spec.rb +31 -31
- data/spec/api/indexer/batch_spec.rb +8 -7
- data/spec/api/indexer/dynamic_fields_spec.rb +8 -8
- data/spec/api/indexer/fixed_fields_spec.rb +12 -12
- data/spec/api/indexer/fulltext_spec.rb +8 -8
- data/spec/api/indexer/removal_spec.rb +14 -14
- data/spec/api/indexer_spec.rb +2 -2
- data/spec/api/query/advanced_manipulation_examples.rb +3 -3
- data/spec/api/query/connectives_examples.rb +26 -14
- data/spec/api/query/dsl_spec.rb +17 -9
- data/spec/api/query/dynamic_fields_examples.rb +18 -18
- data/spec/api/query/faceting_examples.rb +62 -62
- data/spec/api/query/fulltext_examples.rb +56 -55
- data/spec/api/query/function_spec.rb +26 -26
- data/spec/api/query/geo_examples.rb +6 -6
- data/spec/api/query/group_spec.rb +6 -6
- data/spec/api/query/highlighting_examples.rb +26 -26
- data/spec/api/query/join_spec.rb +2 -2
- data/spec/api/query/more_like_this_spec.rb +29 -29
- data/spec/api/query/ordering_pagination_examples.rb +25 -25
- data/spec/api/query/scope_examples.rb +39 -39
- data/spec/api/query/spatial_examples.rb +3 -3
- data/spec/api/query/spellcheck_examples.rb +3 -3
- data/spec/api/query/standard_spec.rb +1 -1
- data/spec/api/query/stats_examples.rb +8 -8
- data/spec/api/query/text_field_scoping_examples.rb +5 -5
- data/spec/api/query/types_spec.rb +4 -4
- data/spec/api/search/cursor_paginated_collection_spec.rb +12 -12
- data/spec/api/search/dynamic_fields_spec.rb +4 -4
- data/spec/api/search/faceting_spec.rb +55 -52
- data/spec/api/search/highlighting_spec.rb +7 -7
- data/spec/api/search/hits_spec.rb +29 -29
- data/spec/api/search/paginated_collection_spec.rb +18 -18
- data/spec/api/search/results_spec.rb +13 -13
- data/spec/api/search/search_spec.rb +3 -3
- data/spec/api/search/stats_spec.rb +10 -10
- data/spec/api/session_proxy/class_sharding_session_proxy_spec.rb +19 -18
- data/spec/api/session_proxy/id_sharding_session_proxy_spec.rb +9 -9
- data/spec/api/session_proxy/master_slave_session_proxy_spec.rb +10 -6
- data/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +10 -10
- data/spec/api/session_proxy/sharding_session_proxy_spec.rb +14 -13
- data/spec/api/session_proxy/silent_fail_session_proxy_spec.rb +2 -2
- data/spec/api/session_proxy/spec_helper.rb +1 -1
- data/spec/api/session_proxy/thread_local_session_proxy_spec.rb +9 -5
- data/spec/api/session_spec.rb +42 -42
- data/spec/api/sunspot_spec.rb +4 -4
- data/spec/integration/atomic_updates_spec.rb +25 -11
- data/spec/integration/dynamic_fields_spec.rb +10 -10
- data/spec/integration/faceting_spec.rb +39 -39
- data/spec/integration/field_grouping_spec.rb +16 -16
- data/spec/integration/field_lists_spec.rb +41 -0
- data/spec/integration/geospatial_spec.rb +19 -8
- data/spec/integration/highlighting_spec.rb +5 -5
- data/spec/integration/indexing_spec.rb +5 -5
- data/spec/integration/keyword_search_spec.rb +47 -45
- data/spec/integration/local_search_spec.rb +4 -4
- data/spec/integration/more_like_this_spec.rb +7 -7
- data/spec/integration/scoped_search_spec.rb +107 -107
- data/spec/integration/spellcheck_spec.rb +52 -7
- data/spec/integration/stats_spec.rb +10 -10
- data/spec/integration/stored_fields_spec.rb +1 -1
- data/spec/integration/test_pagination.rb +4 -4
- data/spec/integration/unicode_spec.rb +1 -1
- data/spec/mocks/post.rb +5 -1
- data/spec/spec_helper.rb +11 -6
- data/sunspot.gemspec +3 -1
- metadata +40 -7
@@ -4,151 +4,151 @@ require 'bigdecimal'
|
|
4
4
|
describe 'indexing attribute fields', :type => :indexer do
|
5
5
|
it 'should correctly index a stored string attribute field' do
|
6
6
|
session.index(post(:title => 'A Title'))
|
7
|
-
connection.
|
7
|
+
expect(connection).to have_add_with(:title_ss => 'A Title')
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should correctly index an integer attribute field' do
|
11
11
|
session.index(post(:blog_id => 4))
|
12
|
-
connection.
|
12
|
+
expect(connection).to have_add_with(:blog_id_i => '4')
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should correctly index a long attribute field' do
|
16
16
|
session.index(Namespaced::Comment.new(:hash => 2**30))
|
17
|
-
connection.
|
17
|
+
expect(connection).to have_add_with(:hash_l => '1073741824')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'should correctly index a float attribute field' do
|
21
21
|
session.index(post(:ratings_average => 2.23))
|
22
|
-
connection.
|
22
|
+
expect(connection).to have_add_with(:average_rating_ft => '2.23')
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'should correctly index a double attribute field' do
|
26
26
|
session.index(Namespaced::Comment.new(:average_rating => 2.23))
|
27
|
-
connection.
|
27
|
+
expect(connection).to have_add_with(:average_rating_e => '2.23')
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should correctly index a trie integer attribute field' do
|
31
31
|
session.index(Photo.new(:size => 104856))
|
32
|
-
connection.
|
32
|
+
expect(connection).to have_add_with(:size_it => '104856')
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'should correctly index a trie float attribute field' do
|
36
36
|
session.index(Photo.new(:average_rating => 2.23))
|
37
|
-
connection.
|
37
|
+
expect(connection).to have_add_with(:average_rating_ft => '2.23')
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should correctly index a trie time attribute field' do
|
41
41
|
session.index(Photo.new(:created_at => Time.parse('2009-12-16 15:00:00 -0400')))
|
42
|
-
connection.
|
42
|
+
expect(connection).to have_add_with(:created_at_dt => '2009-12-16T19:00:00Z')
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'should allow indexing by a multiple-value field' do
|
46
46
|
session.index(post(:category_ids => [3, 14]))
|
47
|
-
connection.
|
47
|
+
expect(connection).to have_add_with(:category_ids_im => ['3', '14'])
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'should not index a single-value field with newlines as multiple' do
|
51
51
|
session.index(post(:title => "Multi\nLine"))
|
52
|
-
connection.adds.last.first.field_by_name(:title_ss).value.
|
52
|
+
expect(connection.adds.last.first.field_by_name(:title_ss).value).to eq("Multi\nLine")
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should correctly index a time field' do
|
56
56
|
session.index(
|
57
57
|
post(:published_at => Time.parse('1983-07-08 05:00:00 -0400'))
|
58
58
|
)
|
59
|
-
connection.
|
59
|
+
expect(connection).to have_add_with(:published_at_dt => '1983-07-08T09:00:00Z')
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'should correctly index a time field that\'s after 32-bit Y2K' do
|
63
63
|
session.index(
|
64
64
|
post(:published_at => DateTime.parse('2050-07-08 05:00:00 -0400'))
|
65
65
|
)
|
66
|
-
connection.
|
66
|
+
expect(connection).to have_add_with(:published_at_dt => '2050-07-08T09:00:00Z')
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'should correctly index a date field' do
|
70
70
|
session.index(post(:expire_date => Date.new(2009, 07, 13)))
|
71
|
-
connection.
|
71
|
+
expect(connection).to have_add_with(:expire_date_d => '2009-07-13T00:00:00Z')
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'should correctly index a date range field' do
|
75
75
|
session.index(post(:featured_for => Date.new(2009, 07, 13)..Date.new(2009, 12, 25)))
|
76
|
-
connection.
|
76
|
+
expect(connection).to have_add_with(:featured_for_dr => '[2009-07-13T00:00:00Z TO 2009-12-25T00:00:00Z]')
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'should correctly index a boolean field' do
|
80
80
|
session.index(post(:featured => true))
|
81
|
-
connection.
|
81
|
+
expect(connection).to have_add_with(:featured_bs => 'true')
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'should correctly index a false boolean field' do
|
85
85
|
session.index(post(:featured => false))
|
86
|
-
connection.
|
86
|
+
expect(connection).to have_add_with(:featured_bs => 'false')
|
87
87
|
end
|
88
88
|
|
89
89
|
it 'should not index a nil boolean field' do
|
90
90
|
session.index(post)
|
91
|
-
connection.
|
91
|
+
expect(connection).not_to have_add_with(:featured_bs)
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'should index latitude and longitude as a pair' do
|
95
95
|
session.index(post(:coordinates => Sunspot::Util::Coordinates.new(40.7, -73.5)))
|
96
|
-
connection.
|
96
|
+
expect(connection).to have_add_with(:coordinates_s => 'dr5xx3nytvgs')
|
97
97
|
end
|
98
98
|
|
99
99
|
it 'should index latitude and longitude passed as non-Floats' do
|
100
100
|
coordinates = Sunspot::Util::Coordinates.new(
|
101
101
|
BigDecimal.new('40.7'), BigDecimal.new('-73.5'))
|
102
102
|
session.index(post(:coordinates => coordinates))
|
103
|
-
connection.
|
103
|
+
expect(connection).to have_add_with(:coordinates_s => 'dr5xx3nytvgs')
|
104
104
|
end
|
105
105
|
|
106
106
|
it 'should correctly index an attribute field with block access' do
|
107
107
|
session.index(post(:title => 'The Blog Post'))
|
108
|
-
connection.
|
108
|
+
expect(connection).to have_add_with(:sort_title_s => 'blog post')
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'should correctly index an attribute field with instance-external block access' do
|
112
112
|
session.index(post(:category_ids => [1, 2, 3]))
|
113
|
-
connection.
|
113
|
+
expect(connection).to have_add_with(:primary_category_id_i => '1')
|
114
114
|
end
|
115
115
|
|
116
116
|
it 'should correctly index a field that is defined on a superclass' do
|
117
117
|
Sunspot.setup(SuperClass) { string :author_name }
|
118
118
|
session.index(post(:author_name => 'Mat Brown'))
|
119
|
-
connection.
|
119
|
+
expect(connection).to have_add_with(:author_name_s => 'Mat Brown')
|
120
120
|
end
|
121
121
|
|
122
122
|
it 'should throw a NoMethodError only if a nonexistent type is defined' do
|
123
|
-
|
124
|
-
|
123
|
+
expect { Sunspot.setup(Post) { string :author_name }}.not_to raise_error
|
124
|
+
expect { Sunspot.setup(Post) { bogus :journey }}.to raise_error(NoMethodError)
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'should throw a NoMethodError if a nonexistent field argument is passed' do
|
128
|
-
|
128
|
+
expect { Sunspot.setup(Post) { string :author_name, :bogus => :argument }}.to raise_error(ArgumentError)
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'should throw an ArgumentError if single-value field tries to index multiple values' do
|
132
|
-
|
132
|
+
expect do
|
133
133
|
Sunspot.setup(Post) { string :author_name }
|
134
134
|
session.index(post(:author_name => ['Mat Brown', 'Matthew Brown']))
|
135
|
-
end.
|
135
|
+
end.to raise_error(ArgumentError)
|
136
136
|
end
|
137
137
|
|
138
138
|
it 'should throw an ArgumentError if specifying more_like_this on type that does not support it' do
|
139
|
-
|
139
|
+
expect do
|
140
140
|
Sunspot.setup(Post) { integer :popularity, :more_like_this => true }
|
141
|
-
end.
|
141
|
+
end.to raise_error(ArgumentError)
|
142
142
|
end
|
143
143
|
|
144
144
|
it 'should use a specified field name when the :as option is set' do
|
145
145
|
session.index(post(:title => 'A Title'))
|
146
|
-
connection.
|
146
|
+
expect(connection).to have_add_with(:legacy_field_s => 'legacy A Title')
|
147
147
|
end
|
148
148
|
|
149
149
|
it 'should use a specified field name when the :as option is set for array values' do
|
150
150
|
session.index(post(:title => 'Another Title'))
|
151
|
-
connection.
|
151
|
+
expect(connection).to have_add_with(:legacy_array_field_sm => ['first string', 'second string'])
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -9,7 +9,7 @@ describe 'batch indexing', :type => :indexer do
|
|
9
9
|
session.index(post)
|
10
10
|
end
|
11
11
|
end
|
12
|
-
connection.adds.length.
|
12
|
+
expect(connection.adds.length).to eq(1)
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should add all batched adds' do
|
@@ -19,8 +19,9 @@ describe 'batch indexing', :type => :indexer do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
add = connection.adds.last
|
22
|
-
connection.adds.first.map { |add| add.field_by_name(:id).value }.
|
22
|
+
expect(connection.adds.first.map { |add| add.field_by_name(:id).value }).to eq(
|
23
23
|
posts.map { |post| "Post #{post.id}" }
|
24
|
+
)
|
24
25
|
end
|
25
26
|
|
26
27
|
it 'should not index changes to models that happen after index call' do
|
@@ -29,13 +30,13 @@ describe 'batch indexing', :type => :indexer do
|
|
29
30
|
session.index(post)
|
30
31
|
post.title = 'Title'
|
31
32
|
end
|
32
|
-
connection.adds.first.first.field_by_name(:title_ss).
|
33
|
+
expect(connection.adds.first.first.field_by_name(:title_ss)).to be_nil
|
33
34
|
end
|
34
35
|
|
35
36
|
it 'should batch an add and a delete' do
|
36
|
-
|
37
|
-
connection.
|
38
|
-
connection.
|
37
|
+
skip 'batching all operations'
|
38
|
+
expect(connection).not_to receive(:add)
|
39
|
+
expect(connection).not_to receive(:remove)
|
39
40
|
session.batch do
|
40
41
|
session.index(posts[0])
|
41
42
|
session.remove(posts[1])
|
@@ -64,7 +65,7 @@ describe 'batch indexing', :type => :indexer do
|
|
64
65
|
a_nested_batch
|
65
66
|
nested_batches_adds = connection.adds
|
66
67
|
|
67
|
-
nested_batches_adds.first.first.field_by_name(:title_ss).value.
|
68
|
+
expect(nested_batches_adds.first.first.field_by_name(:title_ss).value).to eq(
|
68
69
|
two_sets_of_batches_adds.first.first.field_by_name(:title_ss).value
|
69
70
|
)
|
70
71
|
end
|
@@ -3,40 +3,40 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
|
|
3
3
|
describe 'indexing dynamic fields' do
|
4
4
|
it 'indexes string data' do
|
5
5
|
session.index(post(:custom_string => { :test => 'string' }))
|
6
|
-
connection.
|
6
|
+
expect(connection).to have_add_with(:"custom_string:test_ss" => 'string')
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'indexes integer data with virtual accessor' do
|
10
10
|
session.index(post(:category_ids => [1, 2]))
|
11
|
-
connection.
|
11
|
+
expect(connection).to have_add_with(:"custom_integer:1_i" => '1', :"custom_integer:2_i" => '1')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'indexes float data' do
|
15
15
|
session.index(post(:custom_fl => { :test => 1.5 }))
|
16
|
-
connection.
|
16
|
+
expect(connection).to have_add_with(:"custom_float:test_fm" => '1.5')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'indexes time data' do
|
20
20
|
session.index(post(:custom_time => { :test => Time.parse('2009-05-18 18:05:00 -0400') }))
|
21
|
-
connection.
|
21
|
+
expect(connection).to have_add_with(:"custom_time:test_d" => '2009-05-18T22:05:00Z')
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'indexes boolean data' do
|
25
25
|
session.index(post(:custom_boolean => { :test => false }))
|
26
|
-
connection.
|
26
|
+
expect(connection).to have_add_with(:"custom_boolean:test_b" => 'false')
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'indexes multiple values for a field' do
|
30
30
|
session.index(post(:custom_fl => { :test => [1.0, 2.1, 3.2] }))
|
31
|
-
connection.
|
31
|
+
expect(connection).to have_add_with(:"custom_float:test_fm" => %w(1.0 2.1 3.2))
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should throw a NoMethodError if dynamic text field defined' do
|
35
|
-
|
35
|
+
expect do
|
36
36
|
Sunspot.setup(Post) do
|
37
37
|
dynamic_text :custom_text
|
38
38
|
end
|
39
|
-
end.
|
39
|
+
end.to raise_error(NoMethodError)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -3,28 +3,28 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
|
|
3
3
|
describe 'indexing fixed fields', :type => :indexer do
|
4
4
|
it 'should index id' do
|
5
5
|
session.index post
|
6
|
-
connection.
|
6
|
+
expect(connection).to have_add_with(:id => "Post #{post.id}")
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should index type' do
|
10
10
|
session.index post
|
11
|
-
connection.
|
11
|
+
expect(connection).to have_add_with(:type => ['Post', 'SuperClass', 'MockRecord'])
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should not index join fields' do
|
15
15
|
session.index PhotoContainer.new
|
16
|
-
connection.
|
16
|
+
expect(connection).not_to have_add_with(:photo_caption => 'blah')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should index class name' do
|
20
20
|
session.index post
|
21
|
-
connection.
|
21
|
+
expect(connection).to have_add_with(:class_name => 'Post')
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should index the array of objects supplied' do
|
25
25
|
posts = Array.new(2) { Post.new }
|
26
26
|
session.index posts
|
27
|
-
connection.
|
27
|
+
expect(connection).to have_add_with(
|
28
28
|
{ :id => "Post #{posts.first.id}" },
|
29
29
|
{ :id => "Post #{posts.last.id}" }
|
30
30
|
)
|
@@ -33,7 +33,7 @@ describe 'indexing fixed fields', :type => :indexer do
|
|
33
33
|
it 'should index an array containing more than one type of object' do
|
34
34
|
post1, comment, post2 = objects = [Post.new, Namespaced::Comment.new, Post.new]
|
35
35
|
session.index objects
|
36
|
-
connection.
|
36
|
+
expect(connection).to have_add_with(
|
37
37
|
{ :id => "Post #{post1.id}", :type => ['Post', 'SuperClass', 'MockRecord'] },
|
38
38
|
{ :id => "Namespaced::Comment #{comment.id}", :type => ['Namespaced::Comment', 'MockRecord'] },
|
39
39
|
{ :id => "Post #{post2.id}", :type => ['Post', 'SuperClass', 'MockRecord'] }
|
@@ -41,22 +41,22 @@ describe 'indexing fixed fields', :type => :indexer do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'commits immediately after index! called' do
|
44
|
-
connection.
|
45
|
-
connection.
|
44
|
+
expect(connection).to receive(:add).ordered
|
45
|
+
expect(connection).to receive(:commit).ordered
|
46
46
|
session.index!(post)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'raises an ArgumentError if an attempt is made to index an object that has no configuration' do
|
50
|
-
|
50
|
+
expect { session.index(Blog.new) }.to raise_error(Sunspot::NoSetupError)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'raises a NoAdapterError if class without adapter is indexed' do
|
54
|
-
|
54
|
+
expect { session.index(User.new) }.to raise_error(Sunspot::NoAdapterError)
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'raises an ArgumentError if a non-word character is included in the field name' do
|
58
|
-
|
58
|
+
expect do
|
59
59
|
Sunspot.setup(Post) { string :"bad name" }
|
60
|
-
end.
|
60
|
+
end.to raise_error(ArgumentError)
|
61
61
|
end
|
62
62
|
end
|
@@ -3,41 +3,41 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
|
|
3
3
|
describe 'indexing fulltext fields' do
|
4
4
|
it 'indexes text field' do
|
5
5
|
session.index(post(:title => 'A Title'))
|
6
|
-
connection.
|
6
|
+
expect(connection).to have_add_with(:title_text => 'A Title')
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'indexes stored text field' do
|
10
10
|
session.index(post(:body => 'Test body'))
|
11
|
-
connection.
|
11
|
+
expect(connection).to have_add_with(:body_textsv => 'Test body')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'indexes text field with boost' do
|
15
15
|
session.index(post(:title => 'A Title'))
|
16
|
-
connection.adds.last.first.field_by_name(:title_text).attrs[:boost].
|
16
|
+
expect(connection.adds.last.first.field_by_name(:title_text).attrs[:boost]).to eq(2)
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'indexes multiple values for a text field' do
|
20
20
|
session.index(post(:body => %w(some title)))
|
21
|
-
connection.
|
21
|
+
expect(connection).to have_add_with(:body_textsv => %w(some title))
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'indexes text via a block accessor' do
|
25
25
|
session.index(post(:title => 'backwards'))
|
26
|
-
connection.
|
26
|
+
expect(connection).to have_add_with(:backwards_title_text => 'sdrawkcab')
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'indexes document level boost using block' do
|
30
30
|
session.index(post(:ratings_average => 4.0))
|
31
|
-
connection.adds.last.first.attrs[:boost].
|
31
|
+
expect(connection.adds.last.first.attrs[:boost]).to eq(1.25)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'indexes document level boost using attribute' do
|
35
35
|
session.index(Namespaced::Comment.new(:boost => 1.5))
|
36
|
-
connection.adds.last.first.attrs[:boost].
|
36
|
+
expect(connection.adds.last.first.attrs[:boost]).to eq(1.5)
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'indexes document level boost defined statically' do
|
40
40
|
session.index(Photo.new)
|
41
|
-
connection.adds.last.first.attrs[:boost].
|
41
|
+
expect(connection.adds.last.first.attrs[:boost]).to eq(0.75)
|
42
42
|
end
|
43
43
|
end
|
@@ -3,54 +3,54 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
|
|
3
3
|
describe 'document removal', :type => :indexer do
|
4
4
|
it 'removes an object from the index' do
|
5
5
|
session.remove(post)
|
6
|
-
connection.
|
6
|
+
expect(connection).to have_delete("Post #{post.id}")
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'removes an object by type and id' do
|
10
10
|
session.remove_by_id(Post, 1)
|
11
|
-
connection.
|
11
|
+
expect(connection).to have_delete('Post 1')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'removes an object by type and ids' do
|
15
15
|
session.remove_by_id(Post, 1, 2)
|
16
|
-
connection.
|
16
|
+
expect(connection).to have_delete('Post 1', 'Post 2')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'removes an object by type and ids array' do
|
20
20
|
session.remove_by_id(Post, [1, 2])
|
21
|
-
connection.
|
21
|
+
expect(connection).to have_delete('Post 1', 'Post 2')
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'removes an object by type and ids and immediately commits' do
|
25
|
-
connection.
|
26
|
-
connection.
|
25
|
+
expect(connection).to receive(:delete_by_id).with(['Post 1', 'Post 2', 'Post 3']).ordered
|
26
|
+
expect(connection).to receive(:commit).ordered
|
27
27
|
session.remove_by_id!(Post, 1, 2, 3)
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'removes an object from the index and immediately commits' do
|
31
|
-
connection.
|
32
|
-
connection.
|
31
|
+
expect(connection).to receive(:delete_by_id).ordered
|
32
|
+
expect(connection).to receive(:commit).ordered
|
33
33
|
session.remove!(post)
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'removes everything from the index' do
|
37
37
|
session.remove_all
|
38
|
-
connection.
|
38
|
+
expect(connection).to have_delete_by_query("*:*")
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'removes everything from the index and immediately commits' do
|
42
|
-
connection.
|
43
|
-
connection.
|
42
|
+
expect(connection).to receive(:delete_by_query).ordered
|
43
|
+
expect(connection).to receive(:commit).ordered
|
44
44
|
session.remove_all!
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'removes everything of a given class from the index' do
|
48
48
|
session.remove_all(Post)
|
49
|
-
connection.
|
49
|
+
expect(connection).to have_delete_by_query("type:Post")
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'correctly escapes namespaced classes when removing everything from the index' do
|
53
|
-
connection.
|
53
|
+
expect(connection).to receive(:delete_by_query).with('type:Namespaced\:\:Comment')
|
54
54
|
session.remove_all(Namespaced::Comment)
|
55
55
|
end
|
56
56
|
|
@@ -58,6 +58,6 @@ describe 'document removal', :type => :indexer do
|
|
58
58
|
session.remove(Post) do
|
59
59
|
with(:title, 'monkeys')
|
60
60
|
end
|
61
|
-
connection.
|
61
|
+
expect(connection).to have_delete_by_query("(type:Post AND title_ss:monkeys)")
|
62
62
|
end
|
63
63
|
end
|