thinking-sphinx 3.2.0 → 3.3.0
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/.travis.yml +6 -2
- data/Appraisals +13 -0
- data/Gemfile +2 -1
- data/HISTORY +19 -0
- data/README.textile +3 -2
- data/gemfiles/rails_3_2.gemfile +2 -1
- data/gemfiles/rails_4_0.gemfile +2 -1
- data/gemfiles/rails_4_1.gemfile +2 -1
- data/gemfiles/rails_4_2.gemfile +2 -1
- data/gemfiles/rails_5_0.gemfile +12 -0
- data/lib/thinking_sphinx.rb +2 -0
- data/lib/thinking_sphinx/active_record/attribute/type.rb +17 -3
- data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +12 -4
- data/lib/thinking_sphinx/active_record/database_adapters.rb +1 -1
- data/lib/thinking_sphinx/active_record/sql_builder/query.rb +4 -0
- data/lib/thinking_sphinx/active_record/sql_source.rb +1 -1
- data/lib/thinking_sphinx/configuration.rb +3 -2
- data/lib/thinking_sphinx/connection.rb +23 -10
- data/lib/thinking_sphinx/deltas/index_job.rb +6 -2
- data/lib/thinking_sphinx/errors.rb +25 -0
- data/lib/thinking_sphinx/middlewares/active_record_translator.rb +14 -2
- data/lib/thinking_sphinx/railtie.rb +1 -1
- data/lib/thinking_sphinx/rake_interface.rb +71 -23
- data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +15 -7
- data/lib/thinking_sphinx/real_time/populator.rb +3 -3
- data/lib/thinking_sphinx/tasks.rb +7 -8
- data/lib/thinking_sphinx/wildcard.rb +1 -1
- data/spec/acceptance/association_scoping_spec.rb +5 -5
- data/spec/acceptance/attribute_access_spec.rb +4 -4
- data/spec/acceptance/attribute_updates_spec.rb +3 -3
- data/spec/acceptance/batch_searching_spec.rb +4 -4
- data/spec/acceptance/big_integers_spec.rb +6 -6
- data/spec/acceptance/connection_spec.rb +23 -0
- data/spec/acceptance/excerpts_spec.rb +8 -8
- data/spec/acceptance/facets_spec.rb +13 -13
- data/spec/acceptance/geosearching_spec.rb +8 -8
- data/spec/acceptance/grouping_by_attributes_spec.rb +10 -10
- data/spec/acceptance/index_options_spec.rb +16 -16
- data/spec/acceptance/indexing_spec.rb +3 -3
- data/spec/acceptance/paginating_search_results_spec.rb +3 -3
- data/spec/acceptance/real_time_updates_spec.rb +4 -4
- data/spec/acceptance/remove_deleted_records_spec.rb +12 -12
- data/spec/acceptance/search_counts_spec.rb +2 -2
- data/spec/acceptance/search_for_just_ids_spec.rb +2 -2
- data/spec/acceptance/searching_across_models_spec.rb +6 -6
- data/spec/acceptance/searching_across_schemas_spec.rb +10 -10
- data/spec/acceptance/searching_on_fields_spec.rb +9 -9
- data/spec/acceptance/searching_with_filters_spec.rb +16 -16
- data/spec/acceptance/searching_with_sti_spec.rb +9 -9
- data/spec/acceptance/searching_within_a_model_spec.rb +17 -17
- data/spec/acceptance/sorting_search_results_spec.rb +6 -6
- data/spec/acceptance/specifying_sql_spec.rb +62 -62
- data/spec/acceptance/sphinx_scopes_spec.rb +9 -9
- data/spec/acceptance/sql_deltas_spec.rb +7 -7
- data/spec/acceptance/support/database_cleaner.rb +1 -1
- data/spec/acceptance/support/sphinx_controller.rb +4 -1
- data/spec/acceptance/support/sphinx_helpers.rb +4 -0
- data/spec/acceptance/suspended_deltas_spec.rb +9 -9
- data/spec/internal/app/indices/article_index.rb +2 -2
- data/spec/internal/app/indices/book_index.rb +2 -1
- data/spec/internal/app/indices/product_index.rb +0 -2
- data/spec/internal/app/models/categorisation.rb +8 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/support/json_column.rb +5 -1
- data/spec/support/multi_schema.rb +3 -1
- data/spec/support/sphinx_yaml_helpers.rb +1 -1
- data/spec/thinking_sphinx/active_record/association_spec.rb +1 -1
- data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +41 -38
- data/spec/thinking_sphinx/active_record/base_spec.rb +29 -29
- data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +10 -10
- data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +48 -25
- data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +8 -8
- data/spec/thinking_sphinx/active_record/column_spec.rb +13 -13
- data/spec/thinking_sphinx/active_record/column_sql_presenter_spec.rb +5 -5
- data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +5 -5
- data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +11 -11
- data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +13 -13
- data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +48 -48
- data/spec/thinking_sphinx/active_record/field_spec.rb +7 -7
- data/spec/thinking_sphinx/active_record/filter_reflection_spec.rb +32 -32
- data/spec/thinking_sphinx/active_record/index_spec.rb +35 -36
- data/spec/thinking_sphinx/active_record/interpreter_spec.rb +51 -51
- data/spec/thinking_sphinx/active_record/polymorpher_spec.rb +14 -14
- data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +67 -67
- data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +140 -140
- data/spec/thinking_sphinx/active_record/sql_source_spec.rb +97 -95
- data/spec/thinking_sphinx/configuration_spec.rb +81 -81
- data/spec/thinking_sphinx/connection_spec.rb +13 -13
- data/spec/thinking_sphinx/deletion_spec.rb +11 -11
- data/spec/thinking_sphinx/deltas/default_delta_spec.rb +20 -20
- data/spec/thinking_sphinx/deltas_spec.rb +12 -12
- data/spec/thinking_sphinx/errors_spec.rb +30 -30
- data/spec/thinking_sphinx/excerpter_spec.rb +7 -7
- data/spec/thinking_sphinx/facet_search_spec.rb +16 -16
- data/spec/thinking_sphinx/index_set_spec.rb +7 -7
- data/spec/thinking_sphinx/index_spec.rb +24 -24
- data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +20 -20
- data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +18 -18
- data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +22 -22
- data/spec/thinking_sphinx/middlewares/geographer_spec.rb +9 -9
- data/spec/thinking_sphinx/middlewares/glazier_spec.rb +4 -4
- data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +7 -7
- data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +53 -53
- data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +5 -5
- data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +15 -15
- data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +1 -1
- data/spec/thinking_sphinx/panes/distance_pane_spec.rb +4 -4
- data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +5 -5
- data/spec/thinking_sphinx/panes/weight_pane_spec.rb +1 -1
- data/spec/thinking_sphinx/rake_interface_spec.rb +66 -53
- data/spec/thinking_sphinx/real_time/attribute_spec.rb +13 -13
- data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +107 -23
- data/spec/thinking_sphinx/real_time/field_spec.rb +14 -14
- data/spec/thinking_sphinx/real_time/index_spec.rb +29 -30
- data/spec/thinking_sphinx/real_time/interpreter_spec.rb +30 -30
- data/spec/thinking_sphinx/scopes_spec.rb +5 -5
- data/spec/thinking_sphinx/search/glaze_spec.rb +15 -15
- data/spec/thinking_sphinx/search/query_spec.rb +10 -10
- data/spec/thinking_sphinx/search_spec.rb +28 -28
- data/spec/thinking_sphinx/wildcard_spec.rb +16 -11
- data/spec/thinking_sphinx_spec.rb +6 -6
- data/thinking-sphinx.gemspec +4 -4
- metadata +12 -9
|
@@ -10,8 +10,8 @@ describe 'Accessing excerpts for methods on a search result', :live => true do
|
|
|
10
10
|
search = Book.search('gods')
|
|
11
11
|
search.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
|
|
12
12
|
|
|
13
|
-
search.first.excerpts.title.
|
|
14
|
-
|
|
13
|
+
expect(search.first.excerpts.title).
|
|
14
|
+
to eq('American <span class="match">Gods</span>')
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "handles UTF-8 text for excerpts" do
|
|
@@ -21,8 +21,8 @@ describe 'Accessing excerpts for methods on a search result', :live => true do
|
|
|
21
21
|
search = Book.search 'миръ'
|
|
22
22
|
search.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
|
|
23
23
|
|
|
24
|
-
search.first.excerpts.title.
|
|
25
|
-
|
|
24
|
+
expect(search.first.excerpts.title).
|
|
25
|
+
to eq('Война и <span class="match">миръ</span>')
|
|
26
26
|
end if ENV['SPHINX_VERSION'].try :[], /2.2.\d/
|
|
27
27
|
|
|
28
28
|
it "does not include class names in excerpts" do
|
|
@@ -32,8 +32,8 @@ describe 'Accessing excerpts for methods on a search result', :live => true do
|
|
|
32
32
|
search = Book.search('graveyard')
|
|
33
33
|
search.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
|
|
34
34
|
|
|
35
|
-
search.first.excerpts.title.
|
|
36
|
-
|
|
35
|
+
expect(search.first.excerpts.title).
|
|
36
|
+
to eq('The <span class="match">Graveyard</span> Book')
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
it "respects the star option with queries" do
|
|
@@ -43,7 +43,7 @@ describe 'Accessing excerpts for methods on a search result', :live => true do
|
|
|
43
43
|
search = Article.search('thin', :star => true)
|
|
44
44
|
search.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
|
|
45
45
|
|
|
46
|
-
search.first.excerpts.title.
|
|
47
|
-
|
|
46
|
+
expect(search.first.excerpts.title).
|
|
47
|
+
to eq('<span class="match">Something</span>')
|
|
48
48
|
end
|
|
49
49
|
end
|
|
@@ -16,9 +16,9 @@ describe 'Faceted searching', :live => true do
|
|
|
16
16
|
Tee.create! :colour => green
|
|
17
17
|
index
|
|
18
18
|
|
|
19
|
-
Tee.facets.to_hash[:colour_id].
|
|
19
|
+
expect(Tee.facets.to_hash[:colour_id]).to eq({
|
|
20
20
|
blue.id => 2, red.id => 1, green.id => 3
|
|
21
|
-
}
|
|
21
|
+
})
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
it "provides facet breakdowns across classes" do
|
|
@@ -30,9 +30,9 @@ describe 'Faceted searching', :live => true do
|
|
|
30
30
|
|
|
31
31
|
article_count = ENV['SPHINX_VERSION'].try(:[], /2.0.\d/) ? 2 : 1
|
|
32
32
|
|
|
33
|
-
ThinkingSphinx.facets.to_hash[:class].
|
|
33
|
+
expect(ThinkingSphinx.facets.to_hash[:class]).to eq({
|
|
34
34
|
'Tee' => 2, 'City' => 1, 'Article' => article_count
|
|
35
|
-
}
|
|
35
|
+
})
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
it "handles field facets" do
|
|
@@ -42,9 +42,9 @@ describe 'Faceted searching', :live => true do
|
|
|
42
42
|
Book.create! :title => '1Q84', :author => '村上 春樹'
|
|
43
43
|
index
|
|
44
44
|
|
|
45
|
-
Book.facets.to_hash[:author].
|
|
45
|
+
expect(Book.facets.to_hash[:author]).to eq({
|
|
46
46
|
'Neil Gaiman' => 2, 'Terry Pratchett' => 1, '村上 春樹' => 1
|
|
47
|
-
}
|
|
47
|
+
})
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
it "handles MVA facets" do
|
|
@@ -62,9 +62,9 @@ describe 'Faceted searching', :live => true do
|
|
|
62
62
|
:tag => pancakes
|
|
63
63
|
index
|
|
64
64
|
|
|
65
|
-
User.facets.to_hash[:tag_ids].
|
|
65
|
+
expect(User.facets.to_hash[:tag_ids]).to eq({
|
|
66
66
|
pancakes.id => 2, waffles.id => 1
|
|
67
|
-
}
|
|
67
|
+
})
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
it "can filter on integer facet results" do
|
|
@@ -76,7 +76,7 @@ describe 'Faceted searching', :live => true do
|
|
|
76
76
|
r1 = Tee.create! :colour => red
|
|
77
77
|
index
|
|
78
78
|
|
|
79
|
-
Tee.facets.for(:colour_id => blue.id).to_a.
|
|
79
|
+
expect(Tee.facets.for(:colour_id => blue.id).to_a).to eq([b1, b2])
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
it "can filter on MVA facet results" do
|
|
@@ -91,7 +91,7 @@ describe 'Faceted searching', :live => true do
|
|
|
91
91
|
Tagging.create! :article => Article.create!(:user => u2), :tag => pancakes
|
|
92
92
|
index
|
|
93
93
|
|
|
94
|
-
User.facets.for(:tag_ids => waffles.id).to_a.
|
|
94
|
+
expect(User.facets.for(:tag_ids => waffles.id).to_a).to eq([u1])
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it "can filter on string facet results" do
|
|
@@ -100,7 +100,7 @@ describe 'Faceted searching', :live => true do
|
|
|
100
100
|
snuff = Book.create! :title => 'Snuff', :author => 'Terry Pratchett'
|
|
101
101
|
index
|
|
102
102
|
|
|
103
|
-
Book.facets.for(:author => 'Neil Gaiman').to_a.
|
|
103
|
+
expect(Book.facets.for(:author => 'Neil Gaiman').to_a).to eq([gods, boys])
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
it "allows enumeration" do
|
|
@@ -119,8 +119,8 @@ describe 'Faceted searching', :live => true do
|
|
|
119
119
|
[:class, {'Tee' => 3}]
|
|
120
120
|
]
|
|
121
121
|
Tee.facets.each do |facet, hash|
|
|
122
|
-
facet.
|
|
123
|
-
hash.
|
|
122
|
+
expect(facet).to eq(expectations[calls].first)
|
|
123
|
+
expect(hash).to eq(expectations[calls].last)
|
|
124
124
|
|
|
125
125
|
calls += 1
|
|
126
126
|
end
|
|
@@ -7,8 +7,8 @@ describe 'Searching by latitude and longitude', :live => true do
|
|
|
7
7
|
bri = City.create :name => 'Brisbane', :lat => -0.4794031, :lng => 2.670838
|
|
8
8
|
index
|
|
9
9
|
|
|
10
|
-
City.search(:geo => [-0.616241, 2.602712], :order => 'geodist ASC').
|
|
11
|
-
to_a.
|
|
10
|
+
expect(City.search(:geo => [-0.616241, 2.602712], :order => 'geodist ASC').
|
|
11
|
+
to_a).to eq([syd, mel, bri])
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
it "filters by distance" do
|
|
@@ -17,10 +17,10 @@ describe 'Searching by latitude and longitude', :live => true do
|
|
|
17
17
|
bri = City.create :name => 'Brisbane', :lat => -0.4794031, :lng => 2.670838
|
|
18
18
|
index
|
|
19
19
|
|
|
20
|
-
City.search(
|
|
20
|
+
expect(City.search(
|
|
21
21
|
:geo => [-0.616241, 2.602712],
|
|
22
22
|
:with => {:geodist => 0.0..470_000.0}
|
|
23
|
-
).to_a.
|
|
23
|
+
).to_a).to eq([mel, syd])
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
it "provides the distance for each search result" do
|
|
@@ -37,9 +37,9 @@ describe 'Searching by latitude and longitude', :live => true do
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
if ActiveRecord::Base.configurations['test']['adapter'][/postgres/]
|
|
40
|
-
cities.first.geodist.
|
|
40
|
+
expect(cities.first.geodist).to eq(expected[:postgresql])
|
|
41
41
|
else # mysql
|
|
42
|
-
cities.first.geodist.
|
|
42
|
+
expect(cities.first.geodist).to eq(expected[:mysql])
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -49,10 +49,10 @@ describe 'Searching by latitude and longitude', :live => true do
|
|
|
49
49
|
bri = City.create :name => 'Brisbane', :lat => -0.4794031, :lng => 2.670838
|
|
50
50
|
index
|
|
51
51
|
|
|
52
|
-
City.search(
|
|
52
|
+
expect(City.search(
|
|
53
53
|
:geo => [-0.616241, 2.602712],
|
|
54
54
|
:with => {:geodist => 0.0..470_000.0},
|
|
55
55
|
:select => "*, geodist as custom_weight"
|
|
56
|
-
).to_a.
|
|
56
|
+
).to_a).to eq([mel, syd])
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -8,7 +8,7 @@ describe 'Grouping search results by attributes', :live => true do
|
|
|
8
8
|
|
|
9
9
|
index
|
|
10
10
|
|
|
11
|
-
Book.search(:group_by => :year).to_a.
|
|
11
|
+
expect(Book.search(:group_by => :year).to_a).to eq([snuff, earth])
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
it "allows sorting within the group" do
|
|
@@ -18,8 +18,8 @@ describe 'Grouping search results by attributes', :live => true do
|
|
|
18
18
|
|
|
19
19
|
index
|
|
20
20
|
|
|
21
|
-
Book.search(:group_by => :year, :order_group_by => 'title ASC').to_a.
|
|
22
|
-
|
|
21
|
+
expect(Book.search(:group_by => :year, :order_group_by => 'title ASC').to_a).
|
|
22
|
+
to eq([snuff, dodger])
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
it "allows enumerating by count" do
|
|
@@ -34,8 +34,8 @@ describe 'Grouping search results by attributes', :live => true do
|
|
|
34
34
|
Book.search(:group_by => :year).each_with_count do |book, count|
|
|
35
35
|
expectation = expectations.shift
|
|
36
36
|
|
|
37
|
-
book.
|
|
38
|
-
count.
|
|
37
|
+
expect(book).to eq(expectation.first)
|
|
38
|
+
expect(count).to eq(expectation.last)
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -51,8 +51,8 @@ describe 'Grouping search results by attributes', :live => true do
|
|
|
51
51
|
Book.search(:group_by => :year).each_with_group do |book, group|
|
|
52
52
|
expectation = expectations.shift
|
|
53
53
|
|
|
54
|
-
book.
|
|
55
|
-
group.
|
|
54
|
+
expect(book).to eq(expectation.first)
|
|
55
|
+
expect(group).to eq(expectation.last)
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
@@ -69,9 +69,9 @@ describe 'Grouping search results by attributes', :live => true do
|
|
|
69
69
|
search.each_with_group_and_count do |book, group, count|
|
|
70
70
|
expectation = expectations.shift
|
|
71
71
|
|
|
72
|
-
book.
|
|
73
|
-
group.
|
|
74
|
-
count.
|
|
72
|
+
expect(book).to eq(expectation[0])
|
|
73
|
+
expect(group).to eq(expectation[1])
|
|
74
|
+
expect(count).to eq(expectation[2])
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
end
|
|
@@ -14,11 +14,11 @@ describe 'Index options' do
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
it "keeps #{type}_fields blank" do
|
|
17
|
-
index.send("#{type}_fields").
|
|
17
|
+
expect(index.send("#{type}_fields")).to be_nil
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
it "sets min_#{type}_len" do
|
|
21
|
-
index.send("min_#{type}_len").
|
|
21
|
+
expect(index.send("min_#{type}_len")).to eq(3)
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -33,11 +33,11 @@ describe 'Index options' do
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it "#{type}_fields should contain the field" do
|
|
36
|
-
index.send("#{type}_fields").
|
|
36
|
+
expect(index.send("#{type}_fields")).to eq('title')
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
it "sets min_#{type}_len" do
|
|
40
|
-
index.send("min_#{type}_len").
|
|
40
|
+
expect(index.send("min_#{type}_len")).to eq(3)
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
end
|
|
@@ -57,12 +57,12 @@ describe 'Index options' do
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
it "stores each source definition" do
|
|
60
|
-
index.sources.length.
|
|
60
|
+
expect(index.sources.length).to eq(2)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
it "treats each source as separate" do
|
|
64
|
-
index.sources.first.fields.length.
|
|
65
|
-
index.sources.last.fields.length.
|
|
64
|
+
expect(index.sources.first.fields.length).to eq(2)
|
|
65
|
+
expect(index.sources.last.fields.length).to eq(3)
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|
|
@@ -77,11 +77,11 @@ describe 'Index options' do
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
it "declares wordcount fields" do
|
|
80
|
-
index.sources.first.sql_field_str2wordcount.
|
|
80
|
+
expect(index.sources.first.sql_field_str2wordcount).to eq(['title'])
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
it "declares wordcount attributes" do
|
|
84
|
-
index.sources.first.sql_attr_str2wordcount.
|
|
84
|
+
expect(index.sources.first.sql_attr_str2wordcount).to eq(['content'])
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
|
|
@@ -98,15 +98,15 @@ describe 'Index options' do
|
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
it "allows for core source settings" do
|
|
101
|
-
index.sources.first.sql_range_step.
|
|
101
|
+
expect(index.sources.first.sql_range_step).to eq(5)
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
it "allows for source options" do
|
|
105
|
-
index.sources.first.disable_range
|
|
105
|
+
expect(index.sources.first.disable_range?).to be_truthy
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
it "respects sql_query_pre values" do
|
|
109
|
-
index.sources.first.sql_query_pre.
|
|
109
|
+
expect(index.sources.first.sql_query_pre).to include("DO STUFF")
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
112
|
|
|
@@ -130,23 +130,23 @@ describe 'Index options' do
|
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
it "prioritises index-level options over YAML options" do
|
|
133
|
-
index.min_infix_len.
|
|
133
|
+
expect(index.min_infix_len).to eq(1)
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
it "prioritises index-level source options" do
|
|
137
|
-
index.sources.first.sql_range_step.
|
|
137
|
+
expect(index.sources.first.sql_range_step).to eq(20)
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
it "keeps index-level options prioritised when rendered again" do
|
|
141
141
|
index.render
|
|
142
142
|
|
|
143
|
-
index.min_infix_len.
|
|
143
|
+
expect(index.min_infix_len).to eq(1)
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
it "keeps index-level options prioritised when rendered again" do
|
|
147
147
|
index.render
|
|
148
148
|
|
|
149
|
-
index.sources.first.sql_range_step.
|
|
149
|
+
expect(index.sources.first.sql_range_step).to eq(20)
|
|
150
150
|
end
|
|
151
151
|
end
|
|
152
152
|
end
|
|
@@ -8,7 +8,7 @@ describe 'Indexing', :live => true do
|
|
|
8
8
|
|
|
9
9
|
article = Article.create! :title => 'Pancakes'
|
|
10
10
|
index 'article_core'
|
|
11
|
-
Article.search.
|
|
11
|
+
expect(Article.search).to be_empty
|
|
12
12
|
|
|
13
13
|
FileUtils.rm path
|
|
14
14
|
end
|
|
@@ -20,7 +20,7 @@ describe 'Indexing', :live => true do
|
|
|
20
20
|
|
|
21
21
|
article = Article.create! :title => 'Pancakes'
|
|
22
22
|
index 'article_core'
|
|
23
|
-
Article.search.
|
|
23
|
+
expect(Article.search).not_to be_empty
|
|
24
24
|
|
|
25
25
|
FileUtils.rm path
|
|
26
26
|
end
|
|
@@ -31,6 +31,6 @@ describe 'Indexing', :live => true do
|
|
|
31
31
|
index 'article_core'
|
|
32
32
|
|
|
33
33
|
file = Rails.root.join('db/sphinx/test/ts-article_core.tmp')
|
|
34
|
-
File.exist?(file).
|
|
34
|
+
expect(File.exist?(file)).to be_falsey
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -5,20 +5,20 @@ describe 'Paginating search results', :live => true do
|
|
|
5
5
|
21.times { |number| Article.create :title => "Article #{number}" }
|
|
6
6
|
index
|
|
7
7
|
|
|
8
|
-
Article.search.total_entries.
|
|
8
|
+
expect(Article.search.total_entries).to eq(21)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it "paginates the result set by default" do
|
|
12
12
|
21.times { |number| Article.create :title => "Article #{number}" }
|
|
13
13
|
index
|
|
14
14
|
|
|
15
|
-
Article.search.length.
|
|
15
|
+
expect(Article.search.length).to eq(20)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
it "tracks the number of pages" do
|
|
19
19
|
21.times { |number| Article.create :title => "Article #{number}" }
|
|
20
20
|
index
|
|
21
21
|
|
|
22
|
-
Article.search.total_pages.
|
|
22
|
+
expect(Article.search.total_pages).to eq(2)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -4,14 +4,14 @@ describe 'Updates to records in real-time indices', :live => true do
|
|
|
4
4
|
it "handles fields with unicode nulls" do
|
|
5
5
|
product = Product.create! :name => "Widget \u0000"
|
|
6
6
|
|
|
7
|
-
Product.search.first.
|
|
8
|
-
end
|
|
7
|
+
expect(Product.search.first).to eq(product)
|
|
8
|
+
end unless ENV['DATABASE'] == 'postgresql'
|
|
9
9
|
|
|
10
10
|
it "handles attributes for sortable fields accordingly" do
|
|
11
11
|
product = Product.create! :name => 'Red Fish'
|
|
12
12
|
product.update_attributes :name => 'Blue Fish'
|
|
13
13
|
|
|
14
|
-
Product.search('blue fish', :indices => ['product_core']).to_a.
|
|
15
|
-
|
|
14
|
+
expect(Product.search('blue fish', :indices => ['product_core']).to_a).
|
|
15
|
+
to eq([product])
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -5,47 +5,47 @@ describe 'Hiding deleted records from search results', :live => true do
|
|
|
5
5
|
pancakes = Article.create! :title => 'Pancakes'
|
|
6
6
|
index
|
|
7
7
|
|
|
8
|
-
Article.search('pancakes').
|
|
8
|
+
expect(Article.search('pancakes')).not_to be_empty
|
|
9
9
|
pancakes.destroy
|
|
10
10
|
|
|
11
|
-
Article.search('pancakes').
|
|
11
|
+
expect(Article.search('pancakes')).to be_empty
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
it "will catch stale records deleted without callbacks being fired" do
|
|
15
15
|
pancakes = Article.create! :title => 'Pancakes'
|
|
16
16
|
index
|
|
17
17
|
|
|
18
|
-
Article.search('pancakes').
|
|
18
|
+
expect(Article.search('pancakes')).not_to be_empty
|
|
19
19
|
Article.connection.execute "DELETE FROM articles WHERE id = #{pancakes.id}"
|
|
20
20
|
|
|
21
|
-
Article.search('pancakes').
|
|
21
|
+
expect(Article.search('pancakes')).to be_empty
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
it "removes records from real-time index results" do
|
|
25
25
|
product = Product.create! :name => 'Shiny'
|
|
26
26
|
|
|
27
|
-
Product.search('Shiny', :indices => ['product_core']).to_a.
|
|
28
|
-
|
|
27
|
+
expect(Product.search('Shiny', :indices => ['product_core']).to_a).
|
|
28
|
+
to eq([product])
|
|
29
29
|
|
|
30
30
|
product.destroy
|
|
31
31
|
|
|
32
|
-
Product.search_for_ids('Shiny', :indices => ['product_core']).
|
|
33
|
-
|
|
32
|
+
expect(Product.search_for_ids('Shiny', :indices => ['product_core'])).
|
|
33
|
+
to be_empty
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
it "does not remove real-time results when callbacks are disabled" do
|
|
37
37
|
original = ThinkingSphinx::Configuration.instance.
|
|
38
38
|
settings['real_time_callbacks']
|
|
39
39
|
product = Product.create! :name => 'Shiny'
|
|
40
|
-
Product.search('Shiny', :indices => ['product_core']).to_a.
|
|
41
|
-
|
|
40
|
+
expect(Product.search('Shiny', :indices => ['product_core']).to_a).
|
|
41
|
+
to eq([product])
|
|
42
42
|
|
|
43
43
|
ThinkingSphinx::Configuration.instance.
|
|
44
44
|
settings['real_time_callbacks'] = false
|
|
45
45
|
|
|
46
46
|
product.destroy
|
|
47
|
-
Product.search_for_ids('Shiny', :indices => ['product_core']).
|
|
48
|
-
|
|
47
|
+
expect(Product.search_for_ids('Shiny', :indices => ['product_core'])).
|
|
48
|
+
not_to be_empty
|
|
49
49
|
|
|
50
50
|
ThinkingSphinx::Configuration.instance.
|
|
51
51
|
settings['real_time_callbacks'] = original
|