thinking-sphinx 5.1.0 → 5.2.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/.circleci/config.yml +5 -3
- data/Appraisals +3 -3
- data/CHANGELOG.markdown +14 -0
- data/README.textile +8 -8
- data/lib/thinking_sphinx.rb +5 -2
- data/lib/thinking_sphinx/railtie.rb +5 -0
- data/lib/thinking_sphinx/real_time/index/template.rb +12 -0
- data/lib/thinking_sphinx/real_time/populator.rb +4 -1
- data/lib/thinking_sphinx/real_time/transcriber.rb +6 -0
- data/lib/thinking_sphinx/real_time/translator.rb +1 -0
- data/lib/thinking_sphinx/settings.rb +2 -1
- data/spec/thinking_sphinx/real_time/index_spec.rb +13 -1
- data/thinking-sphinx.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c14b609439492778ba5139bc3e75ffc17952a803c8d6f0d892eb76b7587da4cb
|
|
4
|
+
data.tar.gz: fe3ba9a0b8c1d081960ff9f988e5a8a61e094da07d0dccdf3854f9962af6da26
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6642a48f92ce9b7040e05eb2552a6329492151114468bdf2b82f31f5a6875ba33fda5e190ec0a0220d8a058b69af25057f8ce5beead88ba8351aa8d63dfbb5c0
|
|
7
|
+
data.tar.gz: 89b8ee56a4915cd1db7bd761766c56d2586ae575028a0fae2924d73588c312eb9f9505d2d63272e275710d7b6be4f81c63445d0a320363bcb098d3f4686913ef
|
data/.circleci/config.yml
CHANGED
|
@@ -28,7 +28,7 @@ workflows:
|
|
|
28
28
|
debian: buster
|
|
29
29
|
matrix:
|
|
30
30
|
parameters:
|
|
31
|
-
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2' ]
|
|
31
|
+
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2', '3.0.0' ]
|
|
32
32
|
# - test:
|
|
33
33
|
# database: postgresql
|
|
34
34
|
# sphinx_version: 3.3.1
|
|
@@ -62,7 +62,7 @@ workflows:
|
|
|
62
62
|
debian: buster
|
|
63
63
|
matrix:
|
|
64
64
|
parameters:
|
|
65
|
-
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2' ]
|
|
65
|
+
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2', '3.0.0' ]
|
|
66
66
|
- test:
|
|
67
67
|
name: "Manticore 3.5.4 with PostgreSQL"
|
|
68
68
|
database: postgresql
|
|
@@ -71,7 +71,7 @@ workflows:
|
|
|
71
71
|
debian: buster
|
|
72
72
|
matrix:
|
|
73
73
|
parameters:
|
|
74
|
-
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2' ]
|
|
74
|
+
ruby: [ '2.4.9', '2.5.8', '2.6.6', '2.7.2', '3.0.0' ]
|
|
75
75
|
|
|
76
76
|
jobs:
|
|
77
77
|
test:
|
|
@@ -115,6 +115,8 @@ jobs:
|
|
|
115
115
|
command: |
|
|
116
116
|
if [ "<< parameters.ruby >>" == "2.7.2" ]; then
|
|
117
117
|
export BUNDLER_VERSION=2.1.4
|
|
118
|
+
elif [ "<< parameters.ruby >>" == "3.0.0" ]; then
|
|
119
|
+
export BUNDLER_VERSION=2.1.4
|
|
118
120
|
else
|
|
119
121
|
export BUNDLER_VERSION=1.17.3
|
|
120
122
|
fi
|
data/Appraisals
CHANGED
|
@@ -15,18 +15,18 @@ appraise 'rails_5_0' do
|
|
|
15
15
|
gem 'jdbc-mysql', '~> 5.1.36', :platform => :jruby
|
|
16
16
|
gem 'activerecord-jdbcmysql-adapter', '~> 50.0', :platform => :jruby
|
|
17
17
|
gem 'activerecord-jdbcpostgresql-adapter', '~> 50.0', :platform => :jruby
|
|
18
|
-
end if RUBY_PLATFORM != "java" || ENV["SPHINX_VERSION"].to_f > 2.1
|
|
18
|
+
end if (RUBY_PLATFORM != "java" || ENV["SPHINX_VERSION"].to_f > 2.1) && RUBY_VERSION.to_f < 3.0
|
|
19
19
|
|
|
20
20
|
appraise 'rails_5_1' do
|
|
21
21
|
gem 'rails', '~> 5.1.0'
|
|
22
22
|
gem 'mysql2', '~> 0.4.0', :platform => :ruby
|
|
23
|
-
end if RUBY_PLATFORM != 'java'
|
|
23
|
+
end if RUBY_PLATFORM != 'java' && RUBY_VERSION.to_f < 3.0
|
|
24
24
|
|
|
25
25
|
appraise 'rails_5_2' do
|
|
26
26
|
gem 'rails', '~> 5.2.0'
|
|
27
27
|
gem 'mysql2', '~> 0.5.0', :platform => :ruby
|
|
28
28
|
gem 'pg', '~> 1.0', :platform => :ruby
|
|
29
|
-
end if RUBY_PLATFORM != 'java'
|
|
29
|
+
end if RUBY_PLATFORM != 'java' && RUBY_VERSION.to_f < 3.0
|
|
30
30
|
|
|
31
31
|
appraise 'rails_6_0' do
|
|
32
32
|
gem 'rails', '~> 6.0.0'
|
data/CHANGELOG.markdown
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
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
|
+
## 5.2.0 - 2021-06-12
|
|
6
|
+
|
|
7
|
+
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v5.2.0)
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
* Confirmed support for Ruby 3.0.
|
|
12
|
+
* Orphaned records in real-time indices can now be cleaned up without running `rails ts:rebuild`. Disabled by default, can be enabled by setting `real_time_tidy` to true per environment in `config/thinking_sphinx.yml` (and will need `ts:rebuild` to restructure indices upon initial deploy). More details in [#1192](https://github.com/pat/thinking-sphinx/pull/1192).
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
* Avoid loading ActiveRecord during Rails initialisation so app configuration can still have an impact ([@jdelStrother](https://github.com/jdelStrother) in [#1194](https://github.com/pat/thinking-sphinx/pull/1194)).
|
|
17
|
+
* Remove `app/indices` (in both the Rails app and engines) from Rails' eager load paths, which was otherwise leading to indices being loaded more than once. (See [#1191](https://github.com/pat/thinking-sphinx/issues/1191) and [#1195](https://github.com/pat/thinking-sphinx/issues/1195)).
|
|
18
|
+
|
|
5
19
|
## 5.1.0 - 2020-12-28
|
|
6
20
|
|
|
7
21
|
[Release Notes](https://github.com/pat/thinking-sphinx/releases/tag/v5.1.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 v5.
|
|
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 v5.2.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.4', :platform => :ruby
|
|
16
16
|
gem 'jdbc-mysql', '~> 5.1.35', :platform => :jruby
|
|
17
|
-
gem 'thinking-sphinx', '~> 5.
|
|
17
|
+
gem 'thinking-sphinx', '~> 5.2'</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.
|
|
20
20
|
|
|
@@ -29,18 +29,18 @@ 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.4 | v2.4, v2.5, v2.6, v2.7 |
|
|
33
|
-
| Sphinx | v2.2.11 | v2.2.11, v3.
|
|
34
|
-
| Manticore | v2.8 | v2.8, v3.
|
|
35
|
-
| ActiveRecord | v4.2 | v4.2..v6.
|
|
32
|
+
| Ruby | v2.4 | v2.4, v2.5, v2.6, v2.7, v3.0 |
|
|
33
|
+
| Sphinx | v2.2.11 | v2.2.11, v3.3.1 |
|
|
34
|
+
| Manticore | v2.8 | v2.8, v3.5 |
|
|
35
|
+
| ActiveRecord | v4.2 | v4.2..v6.1 |
|
|
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
|
|
39
|
+
It should also work with JRuby, but the test environment for that in CI has been unreliable, hence that's not actively tested against at the moment.
|
|
40
40
|
|
|
41
41
|
h3. Sphinx or Manticore
|
|
42
42
|
|
|
43
|
-
Thinking Sphinx is currently built for Sphinx 2.2.11 or newer
|
|
43
|
+
Thinking Sphinx is currently built for Sphinx 2.2.11 or newer, or Manticore v2.8+.
|
|
44
44
|
|
|
45
45
|
h3. Rails and ActiveRecord
|
|
46
46
|
|
data/lib/thinking_sphinx.rb
CHANGED
|
@@ -96,12 +96,15 @@ require 'thinking_sphinx/test'
|
|
|
96
96
|
require 'thinking_sphinx/utf8'
|
|
97
97
|
require 'thinking_sphinx/wildcard'
|
|
98
98
|
# Extended
|
|
99
|
-
require 'thinking_sphinx/active_record'
|
|
100
99
|
require 'thinking_sphinx/deltas'
|
|
101
100
|
require 'thinking_sphinx/distributed'
|
|
102
101
|
require 'thinking_sphinx/logger'
|
|
103
102
|
require 'thinking_sphinx/real_time'
|
|
104
103
|
|
|
105
|
-
|
|
104
|
+
if defined?(Rails::Railtie)
|
|
105
|
+
require 'thinking_sphinx/railtie'
|
|
106
|
+
else
|
|
107
|
+
require 'thinking_sphinx/active_record'
|
|
108
|
+
end
|
|
106
109
|
|
|
107
110
|
ThinkingSphinx.before_index_hooks << ThinkingSphinx::Hooks::GuardPresence
|
|
@@ -7,6 +7,7 @@ class ThinkingSphinx::Railtie < Rails::Railtie
|
|
|
7
7
|
|
|
8
8
|
initializer 'thinking_sphinx.initialisation' do
|
|
9
9
|
ActiveSupport.on_load(:active_record) do
|
|
10
|
+
require 'thinking_sphinx/active_record'
|
|
10
11
|
ActiveRecord::Base.include ThinkingSphinx::ActiveRecord::Base
|
|
11
12
|
end
|
|
12
13
|
|
|
@@ -16,6 +17,10 @@ class ThinkingSphinx::Railtie < Rails::Railtie
|
|
|
16
17
|
Rails.root.join("app", "indices").to_s
|
|
17
18
|
)
|
|
18
19
|
end
|
|
20
|
+
|
|
21
|
+
Rails.application.config.eager_load_paths -=
|
|
22
|
+
ThinkingSphinx::Configuration.instance.index_paths
|
|
23
|
+
Rails.application.config.eager_load_paths.freeze
|
|
19
24
|
end
|
|
20
25
|
end
|
|
21
26
|
|
|
@@ -13,6 +13,10 @@ class ThinkingSphinx::RealTime::Index::Template
|
|
|
13
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
|
+
|
|
17
|
+
if tidying?
|
|
18
|
+
add_attribute -> (_) { Time.current.to_i }, :sphinx_updated_at, :timestamp
|
|
19
|
+
end
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
private
|
|
@@ -34,7 +38,15 @@ class ThinkingSphinx::RealTime::Index::Template
|
|
|
34
38
|
[:class, :name]
|
|
35
39
|
end
|
|
36
40
|
|
|
41
|
+
def config
|
|
42
|
+
ThinkingSphinx::Configuration.instance
|
|
43
|
+
end
|
|
44
|
+
|
|
37
45
|
def primary_key
|
|
38
46
|
index.primary_key.to_sym
|
|
39
47
|
end
|
|
48
|
+
|
|
49
|
+
def tidying?
|
|
50
|
+
config.settings["real_time_tidy"]
|
|
51
|
+
end
|
|
40
52
|
end
|
|
@@ -7,6 +7,7 @@ class ThinkingSphinx::RealTime::Populator
|
|
|
7
7
|
|
|
8
8
|
def initialize(index)
|
|
9
9
|
@index = index
|
|
10
|
+
@started_at = Time.current
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def populate
|
|
@@ -17,12 +18,14 @@ class ThinkingSphinx::RealTime::Populator
|
|
|
17
18
|
instrument 'populated', :instances => instances
|
|
18
19
|
end
|
|
19
20
|
|
|
21
|
+
transcriber.clear_before(started_at) if configuration.settings["real_time_tidy"]
|
|
22
|
+
|
|
20
23
|
instrument 'finish_populating'
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
private
|
|
24
27
|
|
|
25
|
-
attr_reader :index
|
|
28
|
+
attr_reader :index, :started_at
|
|
26
29
|
|
|
27
30
|
delegate :controller, :batch_size, :to => :configuration
|
|
28
31
|
delegate :scope, :to => :index
|
|
@@ -5,6 +5,12 @@ class ThinkingSphinx::RealTime::Transcriber
|
|
|
5
5
|
@index = index
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
+
def clear_before(time)
|
|
9
|
+
execute <<~SQL.strip
|
|
10
|
+
DELETE FROM #{@index.name} WHERE sphinx_updated_at < #{time.to_i}
|
|
11
|
+
SQL
|
|
12
|
+
end
|
|
13
|
+
|
|
8
14
|
def copy(*instances)
|
|
9
15
|
items = instances.select { |instance|
|
|
10
16
|
instance.persisted? && copy?(instance)
|
|
@@ -19,7 +19,8 @@ class ThinkingSphinx::Settings
|
|
|
19
19
|
"binlog_path" => "tmp/binlog/ENVIRONMENT",
|
|
20
20
|
"workers" => "threads",
|
|
21
21
|
"mysql_encoding" => "utf8",
|
|
22
|
-
"maximum_statement_length" => (2 ** 23) - 5
|
|
22
|
+
"maximum_statement_length" => (2 ** 23) - 5,
|
|
23
|
+
"real_time_tidy" => false
|
|
23
24
|
}.freeze
|
|
24
25
|
|
|
25
26
|
def self.call(configuration)
|
|
@@ -5,7 +5,9 @@ require 'spec_helper'
|
|
|
5
5
|
describe ThinkingSphinx::RealTime::Index do
|
|
6
6
|
let(:index) { ThinkingSphinx::RealTime::Index.new :user }
|
|
7
7
|
let(:config) { double('config', :settings => {},
|
|
8
|
-
:indices_location => 'location', :next_offset => 8
|
|
8
|
+
:indices_location => 'location', :next_offset => 8,
|
|
9
|
+
:index_set_class => index_set_class) }
|
|
10
|
+
let(:index_set_class) { double(:index_set_class, :reference_name => :user) }
|
|
9
11
|
|
|
10
12
|
before :each do
|
|
11
13
|
allow(ThinkingSphinx::Configuration).to receive_messages :instance => config
|
|
@@ -61,6 +63,16 @@ describe ThinkingSphinx::RealTime::Index do
|
|
|
61
63
|
it "has the internal deleted attribute by default" do
|
|
62
64
|
expect(index.attributes.collect(&:name)).to include('sphinx_deleted')
|
|
63
65
|
end
|
|
66
|
+
|
|
67
|
+
it "does not have an internal updated_at attribute by default" do
|
|
68
|
+
expect(index.attributes.collect(&:name)).to_not include('sphinx_updated_at')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "has an internal updated_at attribute if real_time_tidy is true" do
|
|
72
|
+
config.settings["real_time_tidy"] = true
|
|
73
|
+
|
|
74
|
+
expect(index.attributes.collect(&:name)).to include('sphinx_updated_at')
|
|
75
|
+
end
|
|
64
76
|
end
|
|
65
77
|
|
|
66
78
|
describe '#delta?' do
|
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: 5.
|
|
4
|
+
version: 5.2.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:
|
|
11
|
+
date: 2021-06-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|