thinking-sphinx 4.0.0 → 4.1.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 +5 -5
- data/.gitignore +3 -1
- data/.travis.yml +10 -7
- data/CHANGELOG.markdown +17 -0
- data/README.textile +7 -5
- data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +2 -1
- data/lib/thinking_sphinx/middlewares/active_record_translator.rb +9 -7
- data/lib/thinking_sphinx/real_time/index.rb +2 -2
- data/lib/thinking_sphinx/real_time/index/template.rb +5 -1
- data/lib/thinking_sphinx/real_time/transcribe_instance.rb +1 -1
- data/spec/acceptance/searching_within_a_model_spec.rb +5 -1
- data/spec/internal/app/indices/album_index.rb +4 -0
- data/spec/internal/app/models/album.rb +2 -0
- data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +6 -4
- data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +9 -1
- data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +1 -1
- data/spec/thinking_sphinx/real_time/index_spec.rb +2 -2
- data/spec/thinking_sphinx/real_time/transcribe_instance_spec.rb +1 -1
- data/thinking-sphinx.gemspec +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f97dda977df8957bc00495056f23faf9e5a7f5c15e72b92f18f7c8e28d8385c2
|
4
|
+
data.tar.gz: 7364500f75d1edbc579b4f96bba8be9a3629197ece4cb8e0647077b991c03cfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d928656c4ca161ad37f7ecea1a3a0435b1259016dc77e3ea65717d135f2bde6f6b2a9a38390e5a5eaf3768fc152334310bcb4c166747611670856e3cd0107b1
|
7
|
+
data.tar.gz: 4faefa5f695f14da95e564b97d5f29844befb36ff77888330051367da3fe5d5d48b10328713493fbffb914b4b167d750ed6e591d9a24fb6498a97b6e4f5d8ed5
|
data/.gitignore
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
*.gem
|
2
2
|
.bundle
|
3
3
|
.rbx
|
4
|
+
.rspec
|
5
|
+
.tool-versions
|
4
6
|
gemfiles
|
5
7
|
Gemfile.lock
|
6
8
|
*.sublime-*
|
7
9
|
pkg/*
|
8
10
|
spec/internal/config/test.sphinx.conf
|
9
11
|
spec/internal/db/sphinx
|
10
|
-
spec/internal/log
|
12
|
+
spec/internal/log
|
11
13
|
!spec/internal/tmp/.gitkeep
|
12
14
|
spec/internal/tmp/*
|
13
15
|
tmp
|
data/.travis.yml
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.
|
7
|
-
- jruby-9.1.16.0
|
3
|
+
- 2.3.8
|
4
|
+
- 2.4.5
|
5
|
+
- 2.5.3
|
6
|
+
- 2.6.0
|
8
7
|
addons:
|
9
8
|
apt:
|
10
9
|
packages:
|
@@ -30,10 +29,14 @@ env:
|
|
30
29
|
- DATABASE=postgresql SPHINX_VERSION=2.1.9 SPHINX_ENGINE=sphinx
|
31
30
|
- DATABASE=mysql2 SPHINX_VERSION=2.2.11 SPHINX_ENGINE=sphinx
|
32
31
|
- DATABASE=postgresql SPHINX_VERSION=2.2.11 SPHINX_ENGINE=sphinx
|
33
|
-
- DATABASE=mysql2 SPHINX_VERSION=3.0.
|
34
|
-
- DATABASE=postgresql SPHINX_VERSION=3.0.
|
32
|
+
- DATABASE=mysql2 SPHINX_VERSION=3.0.3 SPHINX_ENGINE=sphinx
|
33
|
+
- DATABASE=postgresql SPHINX_VERSION=3.0.3 SPHINX_ENGINE=sphinx
|
34
|
+
- DATABASE=mysql2 SPHINX_VERSION=3.1.1 SPHINX_ENGINE=sphinx
|
35
35
|
- DATABASE=mysql2 SPHINX_VERSION=2.6.3 SPHINX_ENGINE=manticore
|
36
36
|
- DATABASE=postgresql SPHINX_VERSION=2.6.3 SPHINX_ENGINE=manticore
|
37
|
+
- DATABASE=mysql2 SPHINX_VERSION=2.7.4 SPHINX_ENGINE=manticore
|
38
|
+
- DATABASE=postgresql SPHINX_VERSION=2.7.4 SPHINX_ENGINE=manticore
|
39
|
+
# - DATABASE=postgresql SPHINX_VERSION=3.1.1 SPHINX_ENGINE=sphinx
|
37
40
|
sudo: false
|
38
41
|
addons:
|
39
42
|
postgresql: '9.4'
|
data/CHANGELOG.markdown
CHANGED
@@ -2,6 +2,23 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project (at least, from v3.0.0 onwards) are documented in this file.
|
4
4
|
|
5
|
+
## 4.1.0 - 2018-12-28
|
6
|
+
|
7
|
+
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v4.1.0)
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
* The `:sql` search option can now accept per-model settings with model names as keys. e.g. `ThinkingSphinx.search "foo", :sql => {'Article' => {:include => :user}}` (Sergey Malykh in [#1120](https://github.com/pat/thinking-sphinx/pull/1120)).
|
12
|
+
|
13
|
+
### Changed
|
14
|
+
|
15
|
+
* Drop MRI 2.2 from the test matrix, and thus no longer officially supported (though the code will likely continue to work with 2.2 for a while).
|
16
|
+
* Added MRI 2.6, Sphinx 3.1 and Manticore 2.7 to the test matrix.
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
|
20
|
+
* Real-time indices now work with non-default integer primary keys (alongside UUIDs or other non-integer primary keys).
|
21
|
+
|
5
22
|
## 4.0.0 - 2018-04-10
|
6
23
|
|
7
24
|
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v4.0.0)
|
data/README.textile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
h1. Thinking Sphinx
|
2
2
|
|
3
|
-
Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v4.
|
3
|
+
Thinking Sphinx is a library for connecting ActiveRecord to the Sphinx full-text search tool, and integrates closely with Rails (but also works with other Ruby web frameworks). The current release is v4.1.0.
|
4
4
|
|
5
5
|
h2. Upgrading
|
6
6
|
|
@@ -14,7 +14,7 @@ It's a gem, so install it like you would any other gem. You will also need to sp
|
|
14
14
|
|
15
15
|
<pre><code>gem 'mysql2', '~> 0.3', :platform => :ruby
|
16
16
|
gem 'jdbc-mysql', '~> 5.1.35', :platform => :jruby
|
17
|
-
gem 'thinking-sphinx', '~> 4.
|
17
|
+
gem 'thinking-sphinx', '~> 4.1'</code></pre>
|
18
18
|
|
19
19
|
The MySQL gems mentioned are required for connecting to Sphinx, so please include it even when you're using PostgreSQL for your database. If you're using JRuby with a version of Sphinx prior to 2.2.11, there is "currently an issue with Sphinx and jdbc-mysql 5.1.36 or newer":http://sphinxsearch.com/forum/view.html?id=13939, so you'll need to stick to nothing more recent than 5.1.35, or upgrade Sphinx.
|
20
20
|
|
@@ -29,13 +29,15 @@ h2. Requirements
|
|
29
29
|
The current release of Thinking Sphinx works with the following versions of its dependencies:
|
30
30
|
|
31
31
|
|_. Library |_. Minimum |_. Tested Against |
|
32
|
-
| Ruby | v2.
|
33
|
-
| Sphinx | v2.1.2 | v2.1.9, v2.2.11, v3.0.
|
34
|
-
| Manticore | v2.6.3 | v2.6.3 |
|
32
|
+
| Ruby | v2.3 | v2.3.8, v2.4.5, v2.5.3, v2.6.0 |
|
33
|
+
| Sphinx | v2.1.2 | v2.1.9, v2.2.11, v3.0.3, v3.1.1 |
|
34
|
+
| Manticore | v2.6.3 | v2.6.3, v2.7.4 |
|
35
35
|
| ActiveRecord | v3.2 | v3.2, v4.0, v4.1, v4.2, v5.0, v5.1, v5.2 |
|
36
36
|
|
37
37
|
It _might_ work with older versions of Ruby, but it's highly recommended to update to a supported release.
|
38
38
|
|
39
|
+
It should also work with JRuby, but the test environment on Travis CI has been timing out, hence that's not actively tested against at the moment.
|
40
|
+
|
39
41
|
h3. Sphinx or Manticore
|
40
42
|
|
41
43
|
Thinking Sphinx v3 is currently built for Sphinx 2.1.2 or newer, or Manticore v2.6+.
|
@@ -43,7 +43,8 @@ class ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks <
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def indices
|
46
|
-
@indices ||= config.index_set_class.new
|
46
|
+
@indices ||= config.index_set_class.new(:classes => [instance.class]).
|
47
|
+
select { |index| index.type == "plain" }
|
47
48
|
end
|
48
49
|
|
49
50
|
def new_or_changed?
|
@@ -77,7 +77,9 @@ class ThinkingSphinx::Middlewares::ActiveRecordTranslator <
|
|
77
77
|
@results_for_models ||= model_names.inject({}) do |hash, name|
|
78
78
|
model = name.constantize
|
79
79
|
|
80
|
-
|
80
|
+
model_sql_options = sql_options[name] || sql_options
|
81
|
+
|
82
|
+
hash[name] = model_relation_with_sql_options(model.unscoped, model_sql_options).where(
|
81
83
|
primary_key_for(model) => ids_for_model(name)
|
82
84
|
)
|
83
85
|
|
@@ -85,12 +87,12 @@ class ThinkingSphinx::Middlewares::ActiveRecordTranslator <
|
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
88
|
-
def model_relation_with_sql_options(relation)
|
89
|
-
relation = relation.includes
|
90
|
-
relation = relation.joins
|
91
|
-
relation = relation.order
|
92
|
-
relation = relation.select
|
93
|
-
relation = relation.group
|
90
|
+
def model_relation_with_sql_options(relation, model_sql_options)
|
91
|
+
relation = relation.includes model_sql_options[:include] if model_sql_options[:include]
|
92
|
+
relation = relation.joins model_sql_options[:joins] if model_sql_options[:joins]
|
93
|
+
relation = relation.order model_sql_options[:order] if model_sql_options[:order]
|
94
|
+
relation = relation.select model_sql_options[:select] if model_sql_options[:select]
|
95
|
+
relation = relation.group model_sql_options[:group] if model_sql_options[:group]
|
94
96
|
relation
|
95
97
|
end
|
96
98
|
|
@@ -10,7 +10,7 @@ class ThinkingSphinx::RealTime::Index::Template
|
|
10
10
|
def apply
|
11
11
|
add_field class_column, :sphinx_internal_class_name
|
12
12
|
|
13
|
-
add_attribute
|
13
|
+
add_attribute primary_key, :sphinx_internal_id, :bigint
|
14
14
|
add_attribute class_column, :sphinx_internal_class, :string, :facet => true
|
15
15
|
add_attribute 0, :sphinx_deleted, :integer
|
16
16
|
end
|
@@ -33,4 +33,8 @@ class ThinkingSphinx::RealTime::Index::Template
|
|
33
33
|
def class_column
|
34
34
|
[:class, :name]
|
35
35
|
end
|
36
|
+
|
37
|
+
def primary_key
|
38
|
+
index.primary_key.to_sym
|
39
|
+
end
|
36
40
|
end
|
@@ -24,7 +24,7 @@ class ThinkingSphinx::RealTime::TranscribeInstance
|
|
24
24
|
attr_reader :instance, :index, :properties
|
25
25
|
|
26
26
|
def document_id
|
27
|
-
index.document_id_for_key instance.
|
27
|
+
index.document_id_for_key instance.public_send(index.primary_key)
|
28
28
|
end
|
29
29
|
|
30
30
|
def raise_wrapper(error, property)
|
@@ -86,7 +86,11 @@ describe 'Searching within a model', :live => true do
|
|
86
86
|
album = Album.create! :name => 'The Seldom Seen Kid', :artist => 'Elbow'
|
87
87
|
index
|
88
88
|
|
89
|
-
expect(Album.search.first).
|
89
|
+
expect(Album.search(:indices => ['album_core', 'album_delta']).first).
|
90
|
+
to eq(album)
|
91
|
+
|
92
|
+
expect(Album.search(:indices => ['album_real_core']).first).
|
93
|
+
to eq(album)
|
90
94
|
end
|
91
95
|
end
|
92
96
|
|
@@ -3,3 +3,7 @@
|
|
3
3
|
ThinkingSphinx::Index.define :album, :with => :active_record, :primary_key => :integer_id, :delta => true do
|
4
4
|
indexes name, artist
|
5
5
|
end
|
6
|
+
|
7
|
+
ThinkingSphinx::Index.define :album, :with => :real_time, :primary_key => :integer_id, :name => :album_real do
|
8
|
+
indexes name, artist
|
9
|
+
end
|
@@ -6,6 +6,8 @@ class Album < ActiveRecord::Base
|
|
6
6
|
before_validation :set_id, :on => :create
|
7
7
|
before_validation :set_integer_id, :on => :create
|
8
8
|
|
9
|
+
after_save ThinkingSphinx::RealTime.callback_for(:album)
|
10
|
+
|
9
11
|
validates :id, :presence => true, :uniqueness => true
|
10
12
|
validates :integer_id, :presence => true, :uniqueness => true
|
11
13
|
|
@@ -44,7 +44,8 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
|
|
44
44
|
|
45
45
|
describe '#after_commit' do
|
46
46
|
let(:index) {
|
47
|
-
double('index', :delta? => false, :delta_processor => processor
|
47
|
+
double('index', :delta? => false, :delta_processor => processor,
|
48
|
+
:type => 'plain')
|
48
49
|
}
|
49
50
|
|
50
51
|
before :each do
|
@@ -67,9 +68,9 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
|
|
67
68
|
|
68
69
|
context 'with delta indices' do
|
69
70
|
let(:core_index) { double('index', :delta? => false, :name => 'foo_core',
|
70
|
-
:delta_processor => processor) }
|
71
|
+
:delta_processor => processor, :type => 'plain') }
|
71
72
|
let(:delta_index) { double('index', :delta? => true, :name => 'foo_delta',
|
72
|
-
:delta_processor => processor) }
|
73
|
+
:delta_processor => processor, :type => 'plain') }
|
73
74
|
|
74
75
|
before :each do
|
75
76
|
allow(ThinkingSphinx::Deltas).to receive_messages :suspended? => false
|
@@ -127,7 +128,8 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
|
|
127
128
|
|
128
129
|
describe '#before_save' do
|
129
130
|
let(:index) {
|
130
|
-
double('index', :delta? => true, :delta_processor => processor
|
131
|
+
double('index', :delta? => true, :delta_processor => processor,
|
132
|
+
:type => 'plain')
|
131
133
|
}
|
132
134
|
|
133
135
|
before :each do
|
@@ -119,11 +119,11 @@ describe ThinkingSphinx::Middlewares::ActiveRecordTranslator do
|
|
119
119
|
|
120
120
|
context 'SQL options' do
|
121
121
|
let(:relation) { double('relation', :where => []) }
|
122
|
+
let(:model_name) { double('article', :constantize => model) }
|
122
123
|
|
123
124
|
before :each do
|
124
125
|
allow(model).to receive_messages :unscoped => relation
|
125
126
|
|
126
|
-
model_name = double('article', :constantize => model)
|
127
127
|
context[:results] << raw_result(1, model_name)
|
128
128
|
end
|
129
129
|
|
@@ -167,6 +167,14 @@ describe ThinkingSphinx::Middlewares::ActiveRecordTranslator do
|
|
167
167
|
|
168
168
|
middleware.call [context]
|
169
169
|
end
|
170
|
+
|
171
|
+
it "passes through SQL options defined by model to the relation" do
|
172
|
+
search.options[:sql] = {model_name => {:joins => :association}}
|
173
|
+
|
174
|
+
expect(relation).to receive(:joins).with(:association).and_return(relation)
|
175
|
+
|
176
|
+
middleware.call [context]
|
177
|
+
end
|
170
178
|
end
|
171
179
|
end
|
172
180
|
end
|
@@ -11,7 +11,7 @@ describe ThinkingSphinx::RealTime::Callbacks::RealTimeCallbacks do
|
|
11
11
|
:settings => {}) }
|
12
12
|
let(:index) { double('index', :name => 'my_index', :is_a? => true,
|
13
13
|
:document_id_for_key => 123, :fields => [], :attributes => [],
|
14
|
-
:conditions => []) }
|
14
|
+
:conditions => [], :primary_key => :id) }
|
15
15
|
let(:connection) { double('connection', :execute => true) }
|
16
16
|
|
17
17
|
before :each do
|
@@ -82,7 +82,7 @@ describe ThinkingSphinx::RealTime::Index do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
describe '#model' do
|
85
|
-
let(:model) { double('model') }
|
85
|
+
let(:model) { double('model', :primary_key => :id) }
|
86
86
|
|
87
87
|
it "translates symbol references to model class" do
|
88
88
|
allow(ActiveSupport::Inflector).to receive_messages(:constantize => model)
|
@@ -167,7 +167,7 @@ describe ThinkingSphinx::RealTime::Index do
|
|
167
167
|
end
|
168
168
|
|
169
169
|
describe '#scope' do
|
170
|
-
let(:model) { double('model') }
|
170
|
+
let(:model) { double('model', :primary_key => :id) }
|
171
171
|
|
172
172
|
it "returns the model by default" do
|
173
173
|
allow(ActiveSupport::Inflector).to receive_messages(:constantize => model)
|
@@ -9,7 +9,7 @@ RSpec.describe ThinkingSphinx::RealTime::TranscribeInstance do
|
|
9
9
|
)
|
10
10
|
end
|
11
11
|
let(:instance) { double :id => 43 }
|
12
|
-
let(:index) { double :document_id_for_key => 46 }
|
12
|
+
let(:index) { double :document_id_for_key => 46, :primary_key => :id }
|
13
13
|
let(:property_a) { double :translate => 'A' }
|
14
14
|
let(:property_b) { double :translate => 'B' }
|
15
15
|
let(:property_c) { double :translate => 'C' }
|
data/thinking-sphinx.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thinking-sphinx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pat Allan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -520,8 +520,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
520
520
|
- !ruby/object:Gem::Version
|
521
521
|
version: '0'
|
522
522
|
requirements: []
|
523
|
-
|
524
|
-
rubygems_version: 2.4.5.5
|
523
|
+
rubygems_version: 3.0.1
|
525
524
|
signing_key:
|
526
525
|
specification_version: 4
|
527
526
|
summary: A smart wrapper over Sphinx for ActiveRecord
|